@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.
- package/CHANGELOG.md +30 -0
- package/dist/astm/index.cjs +57 -19
- 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 +56 -19
- 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 +216 -125
- package/dist/deid/index.cjs.map +1 -1
- package/dist/deid/index.mjs +203 -113
- 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 +76 -23
- 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 +75 -23
- package/dist/ncpdp/index.mjs.map +1 -1
- package/dist/x12/index.cjs +72 -23
- package/dist/x12/index.cjs.map +1 -1
- package/dist/x12/index.d.cts +8 -1
- package/dist/x12/index.d.ts +8 -1
- package/dist/x12/index.mjs +71 -23
- package/dist/x12/index.mjs.map +1 -1
- package/package.json +20 -15
package/dist/ccda/index.cjs
CHANGED
|
@@ -1,6 +1,15 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
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
|
+
});
|
|
4
13
|
|
|
5
14
|
// src/rng/splitmix32.ts
|
|
6
15
|
function splitmix32(seed) {
|
|
@@ -150,6 +159,7 @@ function createRng(seed) {
|
|
|
150
159
|
}
|
|
151
160
|
|
|
152
161
|
// src/corpus.ts
|
|
162
|
+
var UNCHECKED = Object.freeze([]);
|
|
153
163
|
function makeCorpus(seed, artifacts, quirks = []) {
|
|
154
164
|
const counts = {};
|
|
155
165
|
const formats = /* @__PURE__ */ new Set();
|
|
@@ -760,11 +770,21 @@ Object.freeze([
|
|
|
760
770
|
]);
|
|
761
771
|
|
|
762
772
|
// src/ccda/example-codes.ts
|
|
773
|
+
var LOINC_OID = "2.16.840.1.113883.6.1";
|
|
774
|
+
var SNOMED_CT_OID = "2.16.840.1.113883.6.96";
|
|
775
|
+
var RXNORM_OID = "2.16.840.1.113883.6.88";
|
|
776
|
+
var CVX_OID = "2.16.840.1.113883.12.292";
|
|
777
|
+
var NCI_ROUTE_OID = "2.16.840.1.113883.3.26.1.1";
|
|
778
|
+
var LOINC = LOINC_OID;
|
|
779
|
+
var SNOMED_CT = SNOMED_CT_OID;
|
|
780
|
+
var RXNORM = RXNORM_OID;
|
|
781
|
+
var CVX = CVX_OID;
|
|
782
|
+
var NCI_ROUTE = NCI_ROUTE_OID;
|
|
763
783
|
var URI_TO_OID = Object.freeze({
|
|
764
|
-
"http://loinc.org":
|
|
765
|
-
"http://snomed.info/sct":
|
|
766
|
-
"http://www.nlm.nih.gov/research/umls/rxnorm":
|
|
767
|
-
"http://hl7.org/fhir/sid/cvx":
|
|
784
|
+
"http://loinc.org": LOINC,
|
|
785
|
+
"http://snomed.info/sct": SNOMED_CT,
|
|
786
|
+
"http://www.nlm.nih.gov/research/umls/rxnorm": RXNORM,
|
|
787
|
+
"http://hl7.org/fhir/sid/cvx": CVX
|
|
768
788
|
});
|
|
769
789
|
function toBuildCode(concept) {
|
|
770
790
|
const codeSystem = URI_TO_OID[concept.system];
|
|
@@ -788,24 +808,24 @@ var VITAL_SIGNS = EXAMPLE_VITAL_SIGNS;
|
|
|
788
808
|
var VACCINES = EXAMPLE_VACCINES;
|
|
789
809
|
var PROCEDURES = EXAMPLE_PROCEDURES;
|
|
790
810
|
var SMOKING_STATUSES = Object.freeze([
|
|
791
|
-
Object.freeze({ code: "266919005", codeSystem:
|
|
792
|
-
Object.freeze({ code: "8517006", codeSystem:
|
|
811
|
+
Object.freeze({ code: "266919005", codeSystem: SNOMED_CT, displayName: "Never smoker" }),
|
|
812
|
+
Object.freeze({ code: "8517006", codeSystem: SNOMED_CT, displayName: "Former smoker" }),
|
|
793
813
|
Object.freeze({
|
|
794
814
|
code: "449868002",
|
|
795
|
-
codeSystem:
|
|
815
|
+
codeSystem: SNOMED_CT,
|
|
796
816
|
displayName: "Current every day smoker"
|
|
797
817
|
}),
|
|
798
818
|
Object.freeze({
|
|
799
819
|
code: "428041000124106",
|
|
800
|
-
codeSystem:
|
|
820
|
+
codeSystem: SNOMED_CT,
|
|
801
821
|
displayName: "Current some day smoker"
|
|
802
822
|
})
|
|
803
823
|
]);
|
|
804
824
|
var ROUTES = Object.freeze([
|
|
805
|
-
Object.freeze({ code: "C38288", codeSystem:
|
|
806
|
-
Object.freeze({ code: "C28161", codeSystem:
|
|
807
|
-
Object.freeze({ code: "C38276", codeSystem:
|
|
808
|
-
Object.freeze({ code: "C38299", codeSystem:
|
|
825
|
+
Object.freeze({ code: "C38288", codeSystem: NCI_ROUTE, displayName: "Oral" }),
|
|
826
|
+
Object.freeze({ code: "C28161", codeSystem: NCI_ROUTE, displayName: "Intramuscular" }),
|
|
827
|
+
Object.freeze({ code: "C38276", codeSystem: NCI_ROUTE, displayName: "Intravenous" }),
|
|
828
|
+
Object.freeze({ code: "C38299", codeSystem: NCI_ROUTE, displayName: "Subcutaneous" })
|
|
809
829
|
]);
|
|
810
830
|
|
|
811
831
|
// src/ccda/identity.ts
|
|
@@ -836,6 +856,28 @@ function resolveMix(allowed, requested, fallback) {
|
|
|
836
856
|
if (requested === void 0) return fallback;
|
|
837
857
|
return requested.map((entry) => resolveKind(allowed, entry));
|
|
838
858
|
}
|
|
859
|
+
function defaultHost() {
|
|
860
|
+
if (typeof undefined !== "function") return { require: __require, resolve: void 0 };
|
|
861
|
+
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) };
|
|
862
|
+
}
|
|
863
|
+
function isRequireEsmRefusal(error) {
|
|
864
|
+
return error?.code === "ERR_REQUIRE_ESM";
|
|
865
|
+
}
|
|
866
|
+
function loadPeer(specifier, host) {
|
|
867
|
+
if (host.resolve === void 0) return host.require(specifier);
|
|
868
|
+
const entry = url.fileURLToPath(host.resolve(specifier));
|
|
869
|
+
try {
|
|
870
|
+
return host.require(entry);
|
|
871
|
+
} catch (error) {
|
|
872
|
+
if (!isRequireEsmRefusal(error)) throw error;
|
|
873
|
+
return host.require(specifier);
|
|
874
|
+
}
|
|
875
|
+
}
|
|
876
|
+
function lazyPeer(specifier, host) {
|
|
877
|
+
let loaded;
|
|
878
|
+
return () => loaded ??= loadPeer(specifier, defaultHost());
|
|
879
|
+
}
|
|
880
|
+
var ccdaPeer = lazyPeer("@cosyte/ccda");
|
|
839
881
|
|
|
840
882
|
// src/ccda/ccd.ts
|
|
841
883
|
var CCDA_DOCUMENT_TYPES = Object.freeze(["ccd", "referralNote"]);
|
|
@@ -924,7 +966,7 @@ function generateCcda(options = {}) {
|
|
|
924
966
|
const { seed = 0 } = options;
|
|
925
967
|
const documentType = resolveKind(CCDA_DOCUMENT_TYPES, options.documentType ?? "ccd");
|
|
926
968
|
const rng = createRng(seed);
|
|
927
|
-
return
|
|
969
|
+
return ccdaPeer().buildCcda(buildInit(rng, documentType));
|
|
928
970
|
}
|
|
929
971
|
function generateCcd(options = {}) {
|
|
930
972
|
return generateCcda({ ...options, documentType: "ccd" });
|
|
@@ -932,11 +974,13 @@ function generateCcd(options = {}) {
|
|
|
932
974
|
function generateReferralNote(options = {}) {
|
|
933
975
|
return generateCcda({ ...options, documentType: "referralNote" });
|
|
934
976
|
}
|
|
977
|
+
|
|
978
|
+
// src/ccda/round-trip.ts
|
|
935
979
|
function roundTrip(doc) {
|
|
936
|
-
const content =
|
|
937
|
-
const reparsed =
|
|
980
|
+
const content = ccdaPeer().serializeCcda(doc);
|
|
981
|
+
const reparsed = ccdaPeer().parseCcda(content);
|
|
938
982
|
const warnings = reparsed.warnings.map((w) => String(w.code));
|
|
939
|
-
const byteStable =
|
|
983
|
+
const byteStable = ccdaPeer().serializeCcda(reparsed) === content;
|
|
940
984
|
return {
|
|
941
985
|
content,
|
|
942
986
|
warnings,
|
|
@@ -944,6 +988,14 @@ function roundTrip(doc) {
|
|
|
944
988
|
specClean: warnings.length === 0 && byteStable
|
|
945
989
|
};
|
|
946
990
|
}
|
|
991
|
+
function ccdaCorpusArtifact(doc, verify) {
|
|
992
|
+
const content = ccdaPeer().serializeCcda(doc);
|
|
993
|
+
if (!verify) return { content, warnings: UNCHECKED };
|
|
994
|
+
return {
|
|
995
|
+
content,
|
|
996
|
+
warnings: ccdaPeer().parseCcda(content).warnings.map((w) => String(w.code))
|
|
997
|
+
};
|
|
998
|
+
}
|
|
947
999
|
|
|
948
1000
|
// src/profile.ts
|
|
949
1001
|
function defineSynthProfile(spec) {
|
|
@@ -1028,7 +1080,7 @@ var CCDA_QUIRKS = Object.freeze({
|
|
|
1028
1080
|
})
|
|
1029
1081
|
});
|
|
1030
1082
|
function toleratingProfile(quirk) {
|
|
1031
|
-
return quirk === "template-extension-absent" ?
|
|
1083
|
+
return quirk === "template-extension-absent" ? ccdaPeer().ccdaProfiles.legacyR11 : ccdaPeer().ccdaProfiles.smartScorecard;
|
|
1032
1084
|
}
|
|
1033
1085
|
var DOC_TEMPLATE_ROOTS = [
|
|
1034
1086
|
"2.16.840.1.113883.10.20.22.1.1",
|
|
@@ -1068,11 +1120,11 @@ function generateCcdaQuirk(options) {
|
|
|
1068
1120
|
const seed = options.seed ?? 0;
|
|
1069
1121
|
const documentType = options.documentType ?? "ccd";
|
|
1070
1122
|
const descriptor = resolveQuirk(CCDA_QUIRKS, "ccda", options.quirk);
|
|
1071
|
-
const clean =
|
|
1123
|
+
const clean = ccdaPeer().serializeCcda(generateCcda({ seed, documentType }));
|
|
1072
1124
|
const content = injectCcdaQuirk(options.quirk, clean);
|
|
1073
1125
|
assertIntendedWarnings(
|
|
1074
1126
|
descriptor.intendedWarnings,
|
|
1075
|
-
|
|
1127
|
+
ccdaPeer().parseCcda(content).warnings.map((w) => String(w.code))
|
|
1076
1128
|
);
|
|
1077
1129
|
return Object.freeze({
|
|
1078
1130
|
format: "ccda",
|
|
@@ -1085,11 +1137,9 @@ function generateCcdaQuirk(options) {
|
|
|
1085
1137
|
function ccdaQuirkRoundTrip(artifact) {
|
|
1086
1138
|
const quirk = artifact.quirk;
|
|
1087
1139
|
const descriptor = resolveQuirk(CCDA_QUIRKS, "ccda", quirk);
|
|
1088
|
-
const bare =
|
|
1140
|
+
const bare = ccdaPeer().parseCcda(artifact.content).warnings.map((w) => String(w.code));
|
|
1089
1141
|
const profile = toleratingProfile(quirk);
|
|
1090
|
-
const profiledWarnings =
|
|
1091
|
-
(w) => String(w.code)
|
|
1092
|
-
);
|
|
1142
|
+
const profiledWarnings = ccdaPeer().parseCcda(artifact.content, { profile }).warnings.map((w) => String(w.code));
|
|
1093
1143
|
return {
|
|
1094
1144
|
content: artifact.content,
|
|
1095
1145
|
warnings: bare,
|
|
@@ -1140,13 +1190,13 @@ var ccdaQuirkProfile = defineSynthProfile({
|
|
|
1140
1190
|
var ALL_KINDS = Object.freeze(["ccd", "referralNote"]);
|
|
1141
1191
|
var DEFAULT_MIX = ALL_KINDS;
|
|
1142
1192
|
function ccdaCorpus(options) {
|
|
1143
|
-
const { seed, count = 1 } = options;
|
|
1193
|
+
const { seed, count = 1, verify = true } = options;
|
|
1144
1194
|
const mix = resolveMix(ALL_KINDS, options.mix, DEFAULT_MIX);
|
|
1145
1195
|
const seedStream = createRng(seed);
|
|
1146
1196
|
const artifacts = Array.from({ length: count }, (_unused, i) => {
|
|
1147
1197
|
const documentType = mix[i % mix.length] ?? "ccd";
|
|
1148
1198
|
const docSeed = seedStream.nextUint32();
|
|
1149
|
-
const rt =
|
|
1199
|
+
const rt = ccdaCorpusArtifact(generateCcda({ seed: docSeed, documentType }), verify);
|
|
1150
1200
|
return {
|
|
1151
1201
|
format: "ccda",
|
|
1152
1202
|
kind: documentType,
|