@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/x12/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();
|
|
@@ -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 =
|
|
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: "
|
|
541
|
-
{ code: "
|
|
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: "
|
|
544
|
-
{ code: "
|
|
545
|
-
{ code: "
|
|
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
|
|
808
|
+
return x12Peer().build837P(spec);
|
|
775
809
|
case "I":
|
|
776
|
-
return
|
|
810
|
+
return x12Peer().build837I(spec);
|
|
777
811
|
case "D":
|
|
778
|
-
return
|
|
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
|
|
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(
|
|
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
|
|
1010
|
+
return x12Peer().build271(spec);
|
|
972
1011
|
}
|
|
1012
|
+
|
|
1013
|
+
// src/x12/round-trip.ts
|
|
973
1014
|
function roundTrip(interchange) {
|
|
974
|
-
const content =
|
|
975
|
-
const reparsed =
|
|
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 =
|
|
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
|
|
1041
|
+
return generate835({ seed });
|
|
993
1042
|
case "271":
|
|
994
|
-
return
|
|
1043
|
+
return generate271({ seed });
|
|
995
1044
|
case "837P":
|
|
996
|
-
return
|
|
1045
|
+
return generate837("P", { seed });
|
|
997
1046
|
case "837I":
|
|
998
|
-
return
|
|
1047
|
+
return generate837("I", { seed });
|
|
999
1048
|
case "837D":
|
|
1000
|
-
return
|
|
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,
|