@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.
Files changed (46) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/astm/index.cjs +55 -18
  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 +54 -18
  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 +207 -118
  15. package/dist/deid/index.cjs.map +1 -1
  16. package/dist/deid/index.mjs +194 -106
  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 +74 -22
  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 +73 -22
  39. package/dist/ncpdp/index.mjs.map +1 -1
  40. package/dist/x12/index.cjs +65 -17
  41. package/dist/x12/index.cjs.map +1 -1
  42. package/dist/x12/index.d.cts +6 -0
  43. package/dist/x12/index.d.ts +6 -0
  44. package/dist/x12/index.mjs +64 -17
  45. package/dist/x12/index.mjs.map +1 -1
  46. package/package.json +20 -15
@@ -1,6 +1,15 @@
1
1
  'use strict';
2
2
 
3
- var ccda = require('@cosyte/ccda');
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": ccda.LOINC,
765
- "http://snomed.info/sct": ccda.SNOMED_CT,
766
- "http://www.nlm.nih.gov/research/umls/rxnorm": ccda.RXNORM,
767
- "http://hl7.org/fhir/sid/cvx": ccda.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: ccda.SNOMED_CT, displayName: "Never smoker" }),
792
- Object.freeze({ code: "8517006", codeSystem: ccda.SNOMED_CT, displayName: "Former smoker" }),
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: ccda.SNOMED_CT,
815
+ codeSystem: SNOMED_CT,
796
816
  displayName: "Current every day smoker"
797
817
  }),
798
818
  Object.freeze({
799
819
  code: "428041000124106",
800
- codeSystem: ccda.SNOMED_CT,
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: ccda.NCI_ROUTE, displayName: "Oral" }),
806
- Object.freeze({ code: "C28161", codeSystem: ccda.NCI_ROUTE, displayName: "Intramuscular" }),
807
- Object.freeze({ code: "C38276", codeSystem: ccda.NCI_ROUTE, displayName: "Intravenous" }),
808
- Object.freeze({ code: "C38299", codeSystem: ccda.NCI_ROUTE, displayName: "Subcutaneous" })
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 ccda.buildCcda(buildInit(rng, documentType));
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 = ccda.serializeCcda(doc);
937
- const reparsed = ccda.parseCcda(content);
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 = ccda.serializeCcda(reparsed) === content;
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" ? ccda.ccdaProfiles.legacyR11 : ccda.ccdaProfiles.smartScorecard;
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 = ccda.serializeCcda(generateCcda({ seed, documentType }));
1123
+ const clean = ccdaPeer().serializeCcda(generateCcda({ seed, documentType }));
1072
1124
  const content = injectCcdaQuirk(options.quirk, clean);
1073
1125
  assertIntendedWarnings(
1074
1126
  descriptor.intendedWarnings,
1075
- ccda.parseCcda(content).warnings.map((w) => String(w.code))
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 = ccda.parseCcda(artifact.content).warnings.map((w) => String(w.code));
1140
+ const bare = ccdaPeer().parseCcda(artifact.content).warnings.map((w) => String(w.code));
1089
1141
  const profile = toleratingProfile(quirk);
1090
- const profiledWarnings = ccda.parseCcda(artifact.content, { profile }).warnings.map(
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 = roundTrip(generateCcda({ seed: docSeed, documentType }));
1199
+ const rt = ccdaCorpusArtifact(generateCcda({ seed: docSeed, documentType }), verify);
1150
1200
  return {
1151
1201
  format: "ccda",
1152
1202
  kind: documentType,