@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,6 +1,15 @@
1
1
  'use strict';
2
2
 
3
- var x12 = require('@cosyte/x12');
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();
@@ -169,8 +179,32 @@ function makeCorpus(seed, artifacts, quirks = []) {
169
179
  artifacts: Object.freeze(frozenArtifacts)
170
180
  });
171
181
  }
182
+ function defaultHost() {
183
+ if (typeof undefined !== "function") return { require: __require, resolve: void 0 };
184
+ 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) };
185
+ }
186
+ function isRequireEsmRefusal(error) {
187
+ return error?.code === "ERR_REQUIRE_ESM";
188
+ }
189
+ function loadPeer(specifier, host) {
190
+ if (host.resolve === void 0) return host.require(specifier);
191
+ const entry = url.fileURLToPath(host.resolve(specifier));
192
+ try {
193
+ return host.require(entry);
194
+ } catch (error) {
195
+ if (!isRequireEsmRefusal(error)) throw error;
196
+ return host.require(specifier);
197
+ }
198
+ }
199
+ function lazyPeer(specifier, host) {
200
+ let loaded;
201
+ return () => loaded ??= loadPeer(specifier, defaultHost());
202
+ }
203
+ var x12Peer = lazyPeer("@cosyte/x12");
204
+
205
+ // src/x12/money.ts
172
206
  function dec(value) {
173
- const d = x12.X12Decimal.fromString(value);
207
+ const d = x12Peer().X12Decimal.fromString(value);
174
208
  if (d === void 0) throw new SynthError(SYNTH_FATAL_CODES.SYNTH_INVALID_DECIMAL);
175
209
  return d;
176
210
  }
@@ -537,12 +571,12 @@ var PROCEDURE_MODIFIERS = Object.freeze(["25", "59", "76", "GT"]);
537
571
  var PLACES_OF_SERVICE = Object.freeze(["11", "22", "21", "12", "49"]);
538
572
  var DIAGNOSES = Object.freeze(
539
573
  [
540
- { code: "J20.9", label: "acute bronchitis, unspecified" },
541
- { code: "E11.9", label: "type 2 diabetes mellitus without complications" },
574
+ { code: "J209", label: "acute bronchitis, unspecified" },
575
+ { code: "E119", label: "type 2 diabetes mellitus without complications" },
542
576
  { code: "I10", label: "essential (primary) hypertension" },
543
- { code: "M54.5", label: "low back pain" },
544
- { code: "R07.9", label: "chest pain, unspecified" },
545
- { code: "Z00.00", label: "general adult medical exam without abnormal findings" }
577
+ { code: "M545", label: "low back pain" },
578
+ { code: "R079", label: "chest pain, unspecified" },
579
+ { code: "Z0000", label: "general adult medical exam without abnormal findings" }
546
580
  ].map((entry) => Object.freeze(entry))
547
581
  );
548
582
  var REVENUE_CODES = Object.freeze(
@@ -771,11 +805,11 @@ function generate837(variant, options) {
771
805
  const spec = specOf(rng, resolved);
772
806
  switch (resolved) {
773
807
  case "P":
774
- return x12.build837P(spec);
808
+ return x12Peer().build837P(spec);
775
809
  case "I":
776
- return x12.build837I(spec);
810
+ return x12Peer().build837I(spec);
777
811
  case "D":
778
- return x12.build837D(spec);
812
+ return x12Peer().build837D(spec);
779
813
  }
780
814
  }
781
815
  function generate837P(options) {
@@ -787,6 +821,8 @@ function generate837I(options) {
787
821
  function generate837D(options) {
788
822
  return generate837("D", options);
789
823
  }
824
+
825
+ // src/x12/remit-835.ts
790
826
  function generate835(options) {
791
827
  const rng = createRng(options.seed);
792
828
  const partners = x12TradingPartners(rng);
@@ -887,8 +923,10 @@ function generate835(options) {
887
923
  },
888
924
  claims: [claim]
889
925
  };
890
- return x12.build835(spec);
926
+ return x12Peer().build835(spec);
891
927
  }
928
+
929
+ // src/x12/eligibility-271.ts
892
930
  function generate271(options) {
893
931
  const rng = createRng(options.seed);
894
932
  const partners = x12TradingPartners(rng);
@@ -958,7 +996,8 @@ function generate271(options) {
958
996
  serviceTypeCodes: serviceTypes,
959
997
  inPlanNetwork: "Y",
960
998
  monetaryAmount: dec(money(rng.int(500, 5e3))),
961
- percent: dec(String(rng.pick([80, 90, 100])))
999
+ percent: dec(rng.pick([".8", ".9", "1"]))
1000
+ // EB-08 is a decimal fraction
962
1001
  }
963
1002
  ]
964
1003
  }
@@ -968,13 +1007,15 @@ function generate271(options) {
968
1007
  }
969
1008
  ]
970
1009
  };
971
- return x12.build271(spec);
1010
+ return x12Peer().build271(spec);
972
1011
  }
1012
+
1013
+ // src/x12/round-trip.ts
973
1014
  function roundTrip(interchange) {
974
- const content = x12.serializeX12(interchange);
975
- const reparsed = x12.parseX12(content);
1015
+ const content = x12Peer().serializeX12(interchange);
1016
+ const reparsed = x12Peer().parseX12(content);
976
1017
  const warnings = reparsed.warnings.map((w) => String(w.code));
977
- const byteStable = x12.serializeX12(reparsed) === content;
1018
+ const byteStable = x12Peer().serializeX12(reparsed) === content;
978
1019
  return {
979
1020
  content,
980
1021
  warnings,
@@ -982,6 +1023,14 @@ function roundTrip(interchange) {
982
1023
  specClean: warnings.length === 0 && byteStable
983
1024
  };
984
1025
  }
1026
+ function x12CorpusArtifact(interchange, verify) {
1027
+ const content = x12Peer().serializeX12(interchange);
1028
+ if (!verify) return { content, warnings: UNCHECKED };
1029
+ return {
1030
+ content,
1031
+ warnings: x12Peer().parseX12(content).warnings.map((w) => String(w.code))
1032
+ };
1033
+ }
985
1034
 
986
1035
  // src/x12/index.ts
987
1036
  var ALL_KINDS = Object.freeze(["837P", "837I", "837D", "835", "271"]);
@@ -989,26 +1038,26 @@ var DEFAULT_MIX = ALL_KINDS;
989
1038
  function generateKind(kind, seed) {
990
1039
  switch (kind) {
991
1040
  case "835":
992
- return roundTrip(generate835({ seed }));
1041
+ return generate835({ seed });
993
1042
  case "271":
994
- return roundTrip(generate271({ seed }));
1043
+ return generate271({ seed });
995
1044
  case "837P":
996
- return roundTrip(generate837("P", { seed }));
1045
+ return generate837("P", { seed });
997
1046
  case "837I":
998
- return roundTrip(generate837("I", { seed }));
1047
+ return generate837("I", { seed });
999
1048
  case "837D":
1000
- return roundTrip(generate837("D", { seed }));
1049
+ return generate837("D", { seed });
1001
1050
  }
1002
1051
  }
1003
1052
  function x12Corpus(options) {
1004
- const { seed } = options;
1053
+ const { seed, verify = true } = options;
1005
1054
  const mix = resolveMix(ALL_KINDS, options.mix, DEFAULT_MIX);
1006
1055
  const count = options.count ?? mix.length;
1007
1056
  const seedStream = createRng(seed);
1008
1057
  const artifacts = Array.from({ length: count }, (_unused, i) => {
1009
1058
  const kind = mix[i % mix.length] ?? "837P";
1010
1059
  const txSeed = seedStream.nextUint32();
1011
- const rt = generateKind(kind, txSeed);
1060
+ const rt = x12CorpusArtifact(generateKind(kind, txSeed), verify);
1012
1061
  return {
1013
1062
  format: "x12",
1014
1063
  kind,