@cosyte/synth 0.1.5 → 0.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/dist/astm/index.cjs +57 -19
  3. package/dist/astm/index.cjs.map +1 -1
  4. package/dist/astm/index.d.cts +7 -0
  5. package/dist/astm/index.d.ts +7 -0
  6. package/dist/astm/index.mjs +56 -19
  7. package/dist/astm/index.mjs.map +1 -1
  8. package/dist/ccda/index.cjs +76 -26
  9. package/dist/ccda/index.cjs.map +1 -1
  10. package/dist/ccda/index.d.cts +6 -0
  11. package/dist/ccda/index.d.ts +6 -0
  12. package/dist/ccda/index.mjs +63 -14
  13. package/dist/ccda/index.mjs.map +1 -1
  14. package/dist/deid/index.cjs +216 -125
  15. package/dist/deid/index.cjs.map +1 -1
  16. package/dist/deid/index.mjs +203 -113
  17. package/dist/deid/index.mjs.map +1 -1
  18. package/dist/fhir/index.cjs +146 -74
  19. package/dist/fhir/index.cjs.map +1 -1
  20. package/dist/fhir/index.d.cts +6 -0
  21. package/dist/fhir/index.d.ts +6 -0
  22. package/dist/fhir/index.mjs +145 -74
  23. package/dist/fhir/index.mjs.map +1 -1
  24. package/dist/hl7/index.cjs +53 -9
  25. package/dist/hl7/index.cjs.map +1 -1
  26. package/dist/hl7/index.d.cts +6 -0
  27. package/dist/hl7/index.d.ts +6 -0
  28. package/dist/hl7/index.mjs +52 -9
  29. package/dist/hl7/index.mjs.map +1 -1
  30. package/dist/index.cjs +1 -3
  31. package/dist/index.cjs.map +1 -1
  32. package/dist/index.mjs +1 -3
  33. package/dist/index.mjs.map +1 -1
  34. package/dist/ncpdp/index.cjs +76 -23
  35. package/dist/ncpdp/index.cjs.map +1 -1
  36. package/dist/ncpdp/index.d.cts +7 -0
  37. package/dist/ncpdp/index.d.ts +7 -0
  38. package/dist/ncpdp/index.mjs +75 -23
  39. package/dist/ncpdp/index.mjs.map +1 -1
  40. package/dist/x12/index.cjs +72 -23
  41. package/dist/x12/index.cjs.map +1 -1
  42. package/dist/x12/index.d.cts +8 -1
  43. package/dist/x12/index.d.ts +8 -1
  44. package/dist/x12/index.mjs +71 -23
  45. package/dist/x12/index.mjs.map +1 -1
  46. package/package.json +20 -15
@@ -1,8 +1,15 @@
1
1
  'use strict';
2
2
 
3
- var script = require('@cosyte/ncpdp/script');
4
- var common = require('@cosyte/ncpdp/common');
5
- var telecom = require('@cosyte/ncpdp/telecom');
3
+ var module$1 = require('module');
4
+ var url = require('url');
5
+
6
+ var _documentCurrentScript = typeof document !== 'undefined' ? document.currentScript : null;
7
+ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
8
+ get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
9
+ }) : x)(function(x) {
10
+ if (typeof require !== "undefined") return require.apply(this, arguments);
11
+ throw Error('Dynamic require of "' + x + '" is not supported');
12
+ });
6
13
 
7
14
  // src/rng/splitmix32.ts
8
15
  function splitmix32(seed) {
@@ -152,6 +159,7 @@ function createRng(seed) {
152
159
  }
153
160
 
154
161
  // src/corpus.ts
162
+ var UNCHECKED = Object.freeze([]);
155
163
  function makeCorpus(seed, artifacts, quirks = []) {
156
164
  const counts = {};
157
165
  const formats = /* @__PURE__ */ new Set();
@@ -530,6 +538,30 @@ var EXAMPLE_SIG_TEXT = Object.freeze([
530
538
  "Inhale 2 puffs by mouth every 4 to 6 hours as needed"
531
539
  ]);
532
540
  var DAW_CODES = Object.freeze(["0", "1", "2"]);
541
+ function defaultHost() {
542
+ if (typeof undefined !== "function") return { require: __require, resolve: void 0 };
543
+ return { require: module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('index.cjs', document.baseURI).href))), resolve: (s) => undefined(s) };
544
+ }
545
+ function isRequireEsmRefusal(error) {
546
+ return error?.code === "ERR_REQUIRE_ESM";
547
+ }
548
+ function loadPeer(specifier, host) {
549
+ if (host.resolve === void 0) return host.require(specifier);
550
+ const entry = url.fileURLToPath(host.resolve(specifier));
551
+ try {
552
+ return host.require(entry);
553
+ } catch (error) {
554
+ if (!isRequireEsmRefusal(error)) throw error;
555
+ return host.require(specifier);
556
+ }
557
+ }
558
+ function lazyPeer(specifier, host) {
559
+ let loaded;
560
+ return () => loaded ??= loadPeer(specifier, defaultHost());
561
+ }
562
+ var ncpdpScriptPeer = lazyPeer("@cosyte/ncpdp/script");
563
+ var ncpdpTelecomPeer = lazyPeer("@cosyte/ncpdp/telecom");
564
+ var ncpdpCommonPeer = lazyPeer("@cosyte/ncpdp/common");
533
565
 
534
566
  // src/ncpdp/script.ts
535
567
  var SCRIPT_VERSION = "2017071";
@@ -560,13 +592,13 @@ function medicationModel(rng, routing) {
560
592
  const written = `${routing.date.slice(0, 4)}-${routing.date.slice(4, 6)}-${routing.date.slice(6, 8)}`;
561
593
  return {
562
594
  description: drug.description,
563
- coded: { productCode: common.codedValue(drug.ndc, "ND") },
595
+ coded: { productCode: ncpdpCommonPeer().codedValue(drug.ndc, "ND") },
564
596
  quantity: {
565
- value: common.decimalValue(String(rng.int(30, 90))),
597
+ value: ncpdpCommonPeer().decimalValue(String(rng.int(30, 90))),
566
598
  unitOfMeasure: drug.form,
567
599
  codeListQualifier: "38"
568
600
  },
569
- daysSupply: common.decimalValue(String(rng.pick([30, 60, 90]))),
601
+ daysSupply: ncpdpCommonPeer().decimalValue(String(rng.pick([30, 60, 90]))),
570
602
  numberOfRefills: String(rng.int(0, 5)),
571
603
  substitutions: rng.pick(["0", "1"]),
572
604
  writtenDate: written,
@@ -590,14 +622,14 @@ function generateNewRx(options) {
590
622
  const pharmacy = pharmacyModel(rng);
591
623
  const prescriber = prescriberModel(rng);
592
624
  const medication = medicationModel(rng, routing);
593
- const message = script.buildNewRx({
625
+ const message = ncpdpScriptPeer().buildNewRx({
594
626
  header: headerModel(routing),
595
627
  patient,
596
628
  pharmacy,
597
629
  prescriber,
598
630
  medication
599
631
  });
600
- return script.serializeScript(message);
632
+ return ncpdpScriptPeer().serializeScript(message);
601
633
  }
602
634
  function lifecycleFields(rng) {
603
635
  const routing = ncpdpScriptRouting(rng);
@@ -614,14 +646,20 @@ function generateRxRenewalRequest(options) {
614
646
  const rng = createRng(options.seed);
615
647
  const { header: header2, ...fields } = lifecycleFields(rng);
616
648
  const body = { kind: "RxRenewalRequest", ...fields };
617
- return script.serializeScript(new script.ScriptMessage({ header: header2, body, warnings: [] }));
649
+ return ncpdpScriptPeer().serializeScript(
650
+ new (ncpdpScriptPeer()).ScriptMessage({ header: header2, body, warnings: [] })
651
+ );
618
652
  }
619
653
  function generateRxChangeRequest(options) {
620
654
  const rng = createRng(options.seed);
621
655
  const { header: header2, ...fields } = lifecycleFields(rng);
622
656
  const body = { kind: "RxChangeRequest", ...fields };
623
- return script.serializeScript(new script.ScriptMessage({ header: header2, body, warnings: [] }));
657
+ return ncpdpScriptPeer().serializeScript(
658
+ new (ncpdpScriptPeer()).ScriptMessage({ header: header2, body, warnings: [] })
659
+ );
624
660
  }
661
+
662
+ // src/ncpdp/telecom.ts
625
663
  var SYNTHETIC_BIN = "999999";
626
664
  function digitsOnly(value) {
627
665
  return value.replace(/\D/g, "");
@@ -705,7 +743,8 @@ function claimSegment(rng, minimal) {
705
743
  field("E1", "03"),
706
744
  // 03 = NDC
707
745
  field("D7", drug.ndc),
708
- field("E7", String(rng.int(30, 90))),
746
+ field("E7", String(rng.int(30, 90) * 1e3)),
747
+ // 442-E7 carries three implied decimals
709
748
  field("D5", String(rng.pick([30, 60, 90]))),
710
749
  field("D8", rng.pick(DAW_CODES))
711
750
  ]
@@ -721,7 +760,9 @@ function generateTelecom(code, options) {
721
760
  prescriberSegment(rng),
722
761
  claimSegment(rng, false)
723
762
  ];
724
- return telecom.serializeTelecom(telecom.buildTelecomRequest({ header: head, segments }));
763
+ return ncpdpTelecomPeer().serializeTelecom(
764
+ ncpdpTelecomPeer().buildTelecomRequest({ header: head, segments })
765
+ );
725
766
  }
726
767
  function generateB1(options) {
727
768
  return generateTelecom("B1", options);
@@ -732,18 +773,30 @@ function generateB2(options) {
732
773
  function generateB3(options) {
733
774
  return generateTelecom("B3", options);
734
775
  }
776
+
777
+ // src/ncpdp/round-trip.ts
735
778
  function scriptRoundTrip(xml) {
736
- const message = script.parseScript(xml);
779
+ const message = ncpdpScriptPeer().parseScript(xml);
737
780
  const warnings = message.warnings.map((w) => String(w.code));
738
- const byteStable = script.serializeScript(message) === xml;
781
+ const byteStable = ncpdpScriptPeer().serializeScript(message) === xml;
739
782
  return { content: xml, warnings, byteStable, specClean: warnings.length === 0 && byteStable };
740
783
  }
741
784
  function telecomRoundTrip(wire) {
742
- const transaction = telecom.parseTelecom(wire);
785
+ const transaction = ncpdpTelecomPeer().parseTelecom(wire);
743
786
  const warnings = transaction.warnings.map((w) => String(w.code));
744
- const byteStable = telecom.serializeTelecom(transaction) === wire;
787
+ const byteStable = ncpdpTelecomPeer().serializeTelecom(transaction) === wire;
745
788
  return { content: wire, warnings, byteStable, specClean: warnings.length === 0 && byteStable };
746
789
  }
790
+ function scriptCorpusArtifact(xml, verify) {
791
+ if (!verify) return { content: xml, warnings: UNCHECKED };
792
+ const warnings = ncpdpScriptPeer().parseScript(xml).warnings.map((w) => String(w.code));
793
+ return { content: xml, warnings };
794
+ }
795
+ function telecomCorpusArtifact(wire, verify) {
796
+ if (!verify) return { content: wire, warnings: UNCHECKED };
797
+ const warnings = ncpdpTelecomPeer().parseTelecom(wire).warnings.map((w) => String(w.code));
798
+ return { content: wire, warnings };
799
+ }
747
800
 
748
801
  // src/select.ts
749
802
  function resolveKind(allowed, requested) {
@@ -766,29 +819,29 @@ var ALL_KINDS = Object.freeze([
766
819
  "B3"
767
820
  ]);
768
821
  var DEFAULT_MIX = ALL_KINDS;
769
- function generateKind(kind, seed) {
822
+ function generateKind(kind, seed, verify) {
770
823
  switch (kind) {
771
824
  case "NewRx":
772
- return scriptRoundTrip(generateNewRx({ seed }));
825
+ return scriptCorpusArtifact(generateNewRx({ seed }), verify);
773
826
  case "RxRenewalRequest":
774
- return scriptRoundTrip(generateRxRenewalRequest({ seed }));
827
+ return scriptCorpusArtifact(generateRxRenewalRequest({ seed }), verify);
775
828
  case "RxChangeRequest":
776
- return scriptRoundTrip(generateRxChangeRequest({ seed }));
829
+ return scriptCorpusArtifact(generateRxChangeRequest({ seed }), verify);
777
830
  case "B1":
778
831
  case "B2":
779
832
  case "B3":
780
- return telecomRoundTrip(generateTelecom(kind, { seed }));
833
+ return telecomCorpusArtifact(generateTelecom(kind, { seed }), verify);
781
834
  }
782
835
  }
783
836
  function ncpdpCorpus(options) {
784
- const { seed } = options;
837
+ const { seed, verify = true } = options;
785
838
  const mix = resolveMix(ALL_KINDS, options.mix, DEFAULT_MIX);
786
839
  const count = options.count ?? mix.length;
787
840
  const seedStream = createRng(seed);
788
841
  const artifacts = Array.from({ length: count }, (_unused, i) => {
789
842
  const kind = mix[i % mix.length] ?? "NewRx";
790
843
  const txSeed = seedStream.nextUint32();
791
- const rt = generateKind(kind, txSeed);
844
+ const rt = generateKind(kind, txSeed, verify);
792
845
  return {
793
846
  format: "ncpdp",
794
847
  kind,