diff --git a/README.md b/README.md index 19c8802..2250608 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ `@cosyte/synth` generates reproducible synthetic test corpora across the six Cosyte formats (HL7 v2, FHIR R4 / US Core, C-CDA, X12, NCPDP, and ASTM). It is a **consumer** of the -cosyte parsers, not a parser: it builds each artifact **through the parser's own builder/serializer** +Cosyte parsers, not a parser: it builds each artifact **through the parser's own builder/serializer** (so each artifact re-parses through that parser with zero warnings) and draws every identifier, name, date, phone, and address from a **guaranteed-non-colliding synthetic source**. It is a **format/conformance generator, not a clinical simulator**: it does not model disease progression @@ -164,8 +164,8 @@ corpus.artifacts.every((a) => a.warnings.length === 0); // true `@cosyte/x12` is an **optional peer dependency**, needed only for the `@cosyte/synth/x12` subpath. -**Deferred:** the **270** eligibility _request_ (`@cosyte/x12` ships a `build271` but no `build270`, and -`synth` never hand-writes bytes around a missing builder) and **vendor-quirk mode**. +**Deferred:** the **270** eligibility _request_ (`@cosyte/x12` ships `build270` from 0.1.0, but `synth` +does not generate a 270 yet) and **vendor-quirk mode**. ## Generate an NCPDP message diff --git a/docs-content/concepts-archetype.md b/docs-content/concepts-archetype.md index 051b329..fcf4f48 100644 --- a/docs-content/concepts-archetype.md +++ b/docs-content/concepts-archetype.md @@ -6,7 +6,7 @@ sidebar_position: 1 # Core Concepts -`@cosyte/synth` borrows the cosyte parser archetype's _disciplines_ (immutability, stable typed codes, +`@cosyte/synth` borrows the Cosyte parser archetype's _disciplines_ (immutability, stable typed codes, the profile system) but its central reflex is neither the parser's liberal parse nor a fail-closed de-identifier: it is **synthetic-by-construction**. diff --git a/docs-content/guides-deid.md b/docs-content/guides-deid.md index 8698870..6e5d18f 100644 --- a/docs-content/guides-deid.md +++ b/docs-content/guides-deid.md @@ -95,4 +95,4 @@ DEID_LOOP_SKIPPED.map((s) => s.format); // => ["ncpdp-script", "astm", "dicom"] `@cosyte/deid` ships no NCPDP **SCRIPT** or **ASTM** adapter, and `synth` does not generate **DICOM**, so those pairings are deferred until the adapters exist. Optional **Synthea** clinical-content ingestion -(re-serializing Synthea's coherent records through the cosyte parsers) is a documented future concern. +(re-serializing Synthea's coherent records through the Cosyte parsers) is a documented future concern. diff --git a/docs-content/guides-x12.md b/docs-content/guides-x12.md index cfdaae3..8e432d0 100644 --- a/docs-content/guides-x12.md +++ b/docs-content/guides-x12.md @@ -70,7 +70,7 @@ failure. ## Deferred -- The **270** eligibility _request_: `@cosyte/x12` ships a `build271` but no `build270` (the 270 is only - read, as the echoed trace on a 271). `synth` never hand-writes bytes around a missing builder, so 270 - generation lands when `@cosyte/x12` grows `build270`. +- The **270** eligibility _request_: `@cosyte/x12` ships `build270` from 0.1.0, but `synth` does not + generate a 270 yet. `synth` builds every artifact through the parser's own builder or serializer and + never hand-writes the bytes. - **Vendor-quirk mode** (deliberately off-spec fixtures) is deferred for X12. diff --git a/docs-content/intro.md b/docs-content/intro.md index 9b75769..ad3ea71 100644 --- a/docs-content/intro.md +++ b/docs-content/intro.md @@ -10,7 +10,7 @@ Generate **deterministic, seedable synthetic healthcare fixtures** (HL7 v2, FHIR C-CDA, X12, NCPDP and ASTM) without hand-writing a byte of the wire format, and **without any chance the "patient" you just generated is a real person**. -`@cosyte/synth` is a **consumer** of the cosyte parsers, not a parser. It builds each artifact **through +`@cosyte/synth` is a **consumer** of the Cosyte parsers, not a parser. It builds each artifact **through the parser's own builder/serializer** (so each artifact re-parses through that parser with zero warnings) and draws every identifier, name, date, phone, and address from a **guaranteed-non-colliding synthetic source** (SSA diff --git a/docs-content/limitations.md b/docs-content/limitations.md index a514612..f4b3a95 100644 --- a/docs-content/limitations.md +++ b/docs-content/limitations.md @@ -207,14 +207,15 @@ The generation core is **feature-complete across all six formats**. Quirk mode a - **The `deid` pairing loop** ships for **HL7 v2, FHIR, C-CDA, X12, and NCPDP Telecom**. NCPDP **SCRIPT**, **ASTM**, and **DICOM** pairing are deferred (no adapter, or not generated: `DEID_LOOP_SKIPPED` names each). -- **Format-specific gaps flagged, never faked:** the X12 **270** request (no `build270` upstream) and - NCPDP **SCRIPT lifecycle responses** are not generated, a gap is surfaced, never hand-written. +- **Format-specific gaps flagged, never faked:** the X12 **270** request (`@cosyte/x12` ships + `build270` from 0.1.0; `synth` does not use it yet) and NCPDP **SCRIPT lifecycle responses** are not + generated, a gap is surfaced, never hand-written. - **Built-in `synth` profiles.** `defineSynthProfile()` is the public growth-loop hook, and ready-made quirk profiles ship for the three quirk formats; broader **named site/vendor** recipes stay **consumer-authored** until a public spec grounds a built-in one (the same public-only discipline the parsers hold). - **Optional Synthea clinical-content ingestion** (re-serialize Synthea's coherent records through the - cosyte parsers) is a **documented future concern**, not a v1 promise. + Cosyte parsers) is a **documented future concern**, not a v1 promise. ### US Core 6.1.0 profile coverage @@ -271,8 +272,7 @@ refusedCode; // => "SYNTH_PROFILE_NOT_GENERATED" - **The library is MIT.** Third-party **runtime** dependencies are **zero**; the parser and `deid` peers are first-party, optional, and lazily loaded per format. -- **HIPAA-capable, not HIPAA-compliant**, and here that framing is nearly vacuous, because there is no - real PHI: `synth`'s entire output _looks like_ PHI and contains none, by construction. Every value +- **No real PHI.** `synth`'s entire output _looks like_ PHI and contains none, by construction. Every value it emits is drawn from the sources in the floor table above, and a `phi-scan` gate sweeps this project's own sources, fixtures and tooling on every change. You can commit and log a generated corpus without a PHI review of its contents: that is the whole point. diff --git a/documentation/agent-notes.md b/documentation/agent-notes.md index 224fee7..10d4c99 100644 --- a/documentation/agent-notes.md +++ b/documentation/agent-notes.md @@ -79,7 +79,8 @@ it. The standing rule is **relocate, never delete**: every paragraph below cost identity-dense synthetic-safety invariant: NPIs carry a **deliberately-invalid Luhn** check digit (never a real NPI), provider tax ids are 900-range SSNs at `REF*SY`, member ids are synthetic-AA scoped. The `phi-scan` gains X12-aware structured detection (NM1/PER/REF loci; a Luhn-valid NPI is a - hard hit). **Deferred: the 270 request (`@cosyte/x12` ships no `build270`).** Quirk mode is Phase 7. + hard hit). **Deferred: the 270 request (`@cosyte/x12` ships `build270` from 0.1.0; no 270 + generator yet).** Quirk mode is Phase 7. ### NCPDP (SYNTH-7)