@cosyte/synth 0.1.5 → 0.1.6
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.
- package/CHANGELOG.md +12 -0
- package/dist/astm/index.cjs +55 -18
- package/dist/astm/index.cjs.map +1 -1
- package/dist/astm/index.d.cts +7 -0
- package/dist/astm/index.d.ts +7 -0
- package/dist/astm/index.mjs +54 -18
- package/dist/astm/index.mjs.map +1 -1
- package/dist/ccda/index.cjs +76 -26
- package/dist/ccda/index.cjs.map +1 -1
- package/dist/ccda/index.d.cts +6 -0
- package/dist/ccda/index.d.ts +6 -0
- package/dist/ccda/index.mjs +63 -14
- package/dist/ccda/index.mjs.map +1 -1
- package/dist/deid/index.cjs +207 -118
- package/dist/deid/index.cjs.map +1 -1
- package/dist/deid/index.mjs +194 -106
- package/dist/deid/index.mjs.map +1 -1
- package/dist/fhir/index.cjs +146 -74
- package/dist/fhir/index.cjs.map +1 -1
- package/dist/fhir/index.d.cts +6 -0
- package/dist/fhir/index.d.ts +6 -0
- package/dist/fhir/index.mjs +145 -74
- package/dist/fhir/index.mjs.map +1 -1
- package/dist/hl7/index.cjs +53 -9
- package/dist/hl7/index.cjs.map +1 -1
- package/dist/hl7/index.d.cts +6 -0
- package/dist/hl7/index.d.ts +6 -0
- package/dist/hl7/index.mjs +52 -9
- package/dist/hl7/index.mjs.map +1 -1
- package/dist/index.cjs +1 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +1 -3
- package/dist/index.mjs.map +1 -1
- package/dist/ncpdp/index.cjs +74 -22
- package/dist/ncpdp/index.cjs.map +1 -1
- package/dist/ncpdp/index.d.cts +7 -0
- package/dist/ncpdp/index.d.ts +7 -0
- package/dist/ncpdp/index.mjs +73 -22
- package/dist/ncpdp/index.mjs.map +1 -1
- package/dist/x12/index.cjs +65 -17
- package/dist/x12/index.cjs.map +1 -1
- package/dist/x12/index.d.cts +6 -0
- package/dist/x12/index.d.ts +6 -0
- package/dist/x12/index.mjs +64 -17
- package/dist/x12/index.mjs.map +1 -1
- package/package.json +20 -15
package/dist/ncpdp/index.cjs
CHANGED
|
@@ -1,8 +1,15 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
5
|
-
|
|
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:
|
|
595
|
+
coded: { productCode: ncpdpCommonPeer().codedValue(drug.ndc, "ND") },
|
|
564
596
|
quantity: {
|
|
565
|
-
value:
|
|
597
|
+
value: ncpdpCommonPeer().decimalValue(String(rng.int(30, 90))),
|
|
566
598
|
unitOfMeasure: drug.form,
|
|
567
599
|
codeListQualifier: "38"
|
|
568
600
|
},
|
|
569
|
-
daysSupply:
|
|
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 =
|
|
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
|
|
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
|
|
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
|
|
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, "");
|
|
@@ -721,7 +759,9 @@ function generateTelecom(code, options) {
|
|
|
721
759
|
prescriberSegment(rng),
|
|
722
760
|
claimSegment(rng, false)
|
|
723
761
|
];
|
|
724
|
-
return
|
|
762
|
+
return ncpdpTelecomPeer().serializeTelecom(
|
|
763
|
+
ncpdpTelecomPeer().buildTelecomRequest({ header: head, segments })
|
|
764
|
+
);
|
|
725
765
|
}
|
|
726
766
|
function generateB1(options) {
|
|
727
767
|
return generateTelecom("B1", options);
|
|
@@ -732,18 +772,30 @@ function generateB2(options) {
|
|
|
732
772
|
function generateB3(options) {
|
|
733
773
|
return generateTelecom("B3", options);
|
|
734
774
|
}
|
|
775
|
+
|
|
776
|
+
// src/ncpdp/round-trip.ts
|
|
735
777
|
function scriptRoundTrip(xml) {
|
|
736
|
-
const message =
|
|
778
|
+
const message = ncpdpScriptPeer().parseScript(xml);
|
|
737
779
|
const warnings = message.warnings.map((w) => String(w.code));
|
|
738
|
-
const byteStable =
|
|
780
|
+
const byteStable = ncpdpScriptPeer().serializeScript(message) === xml;
|
|
739
781
|
return { content: xml, warnings, byteStable, specClean: warnings.length === 0 && byteStable };
|
|
740
782
|
}
|
|
741
783
|
function telecomRoundTrip(wire) {
|
|
742
|
-
const transaction =
|
|
784
|
+
const transaction = ncpdpTelecomPeer().parseTelecom(wire);
|
|
743
785
|
const warnings = transaction.warnings.map((w) => String(w.code));
|
|
744
|
-
const byteStable =
|
|
786
|
+
const byteStable = ncpdpTelecomPeer().serializeTelecom(transaction) === wire;
|
|
745
787
|
return { content: wire, warnings, byteStable, specClean: warnings.length === 0 && byteStable };
|
|
746
788
|
}
|
|
789
|
+
function scriptCorpusArtifact(xml, verify) {
|
|
790
|
+
if (!verify) return { content: xml, warnings: UNCHECKED };
|
|
791
|
+
const warnings = ncpdpScriptPeer().parseScript(xml).warnings.map((w) => String(w.code));
|
|
792
|
+
return { content: xml, warnings };
|
|
793
|
+
}
|
|
794
|
+
function telecomCorpusArtifact(wire, verify) {
|
|
795
|
+
if (!verify) return { content: wire, warnings: UNCHECKED };
|
|
796
|
+
const warnings = ncpdpTelecomPeer().parseTelecom(wire).warnings.map((w) => String(w.code));
|
|
797
|
+
return { content: wire, warnings };
|
|
798
|
+
}
|
|
747
799
|
|
|
748
800
|
// src/select.ts
|
|
749
801
|
function resolveKind(allowed, requested) {
|
|
@@ -766,29 +818,29 @@ var ALL_KINDS = Object.freeze([
|
|
|
766
818
|
"B3"
|
|
767
819
|
]);
|
|
768
820
|
var DEFAULT_MIX = ALL_KINDS;
|
|
769
|
-
function generateKind(kind, seed) {
|
|
821
|
+
function generateKind(kind, seed, verify) {
|
|
770
822
|
switch (kind) {
|
|
771
823
|
case "NewRx":
|
|
772
|
-
return
|
|
824
|
+
return scriptCorpusArtifact(generateNewRx({ seed }), verify);
|
|
773
825
|
case "RxRenewalRequest":
|
|
774
|
-
return
|
|
826
|
+
return scriptCorpusArtifact(generateRxRenewalRequest({ seed }), verify);
|
|
775
827
|
case "RxChangeRequest":
|
|
776
|
-
return
|
|
828
|
+
return scriptCorpusArtifact(generateRxChangeRequest({ seed }), verify);
|
|
777
829
|
case "B1":
|
|
778
830
|
case "B2":
|
|
779
831
|
case "B3":
|
|
780
|
-
return
|
|
832
|
+
return telecomCorpusArtifact(generateTelecom(kind, { seed }), verify);
|
|
781
833
|
}
|
|
782
834
|
}
|
|
783
835
|
function ncpdpCorpus(options) {
|
|
784
|
-
const { seed } = options;
|
|
836
|
+
const { seed, verify = true } = options;
|
|
785
837
|
const mix = resolveMix(ALL_KINDS, options.mix, DEFAULT_MIX);
|
|
786
838
|
const count = options.count ?? mix.length;
|
|
787
839
|
const seedStream = createRng(seed);
|
|
788
840
|
const artifacts = Array.from({ length: count }, (_unused, i) => {
|
|
789
841
|
const kind = mix[i % mix.length] ?? "NewRx";
|
|
790
842
|
const txSeed = seedStream.nextUint32();
|
|
791
|
-
const rt = generateKind(kind, txSeed);
|
|
843
|
+
const rt = generateKind(kind, txSeed, verify);
|
|
792
844
|
return {
|
|
793
845
|
format: "ncpdp",
|
|
794
846
|
kind,
|