@the-cascade-protocol/cli 0.2.4 → 0.3.0

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 (78) hide show
  1. package/dist/commands/convert.d.ts +8 -5
  2. package/dist/commands/convert.d.ts.map +1 -1
  3. package/dist/commands/convert.js +55 -7
  4. package/dist/commands/convert.js.map +1 -1
  5. package/dist/commands/pod/helpers.d.ts +2 -0
  6. package/dist/commands/pod/helpers.d.ts.map +1 -1
  7. package/dist/commands/pod/helpers.js +62 -1
  8. package/dist/commands/pod/helpers.js.map +1 -1
  9. package/dist/commands/pod/import.d.ts +20 -0
  10. package/dist/commands/pod/import.d.ts.map +1 -0
  11. package/dist/commands/pod/import.js +382 -0
  12. package/dist/commands/pod/import.js.map +1 -0
  13. package/dist/commands/pod/index.d.ts.map +1 -1
  14. package/dist/commands/pod/index.js +2 -0
  15. package/dist/commands/pod/index.js.map +1 -1
  16. package/dist/commands/reconcile.d.ts +32 -0
  17. package/dist/commands/reconcile.d.ts.map +1 -0
  18. package/dist/commands/reconcile.js +116 -0
  19. package/dist/commands/reconcile.js.map +1 -0
  20. package/dist/index.js +5 -3
  21. package/dist/index.js.map +1 -1
  22. package/dist/lib/fhir-converter/cascade-to-fhir-admin.d.ts +13 -0
  23. package/dist/lib/fhir-converter/cascade-to-fhir-admin.d.ts.map +1 -0
  24. package/dist/lib/fhir-converter/cascade-to-fhir-admin.js +70 -0
  25. package/dist/lib/fhir-converter/cascade-to-fhir-admin.js.map +1 -0
  26. package/dist/lib/fhir-converter/cascade-to-fhir-clinical.d.ts +36 -0
  27. package/dist/lib/fhir-converter/cascade-to-fhir-clinical.d.ts.map +1 -0
  28. package/dist/lib/fhir-converter/cascade-to-fhir-clinical.js +407 -0
  29. package/dist/lib/fhir-converter/cascade-to-fhir-clinical.js.map +1 -0
  30. package/dist/lib/fhir-converter/cascade-to-fhir-demographics.d.ts +15 -0
  31. package/dist/lib/fhir-converter/cascade-to-fhir-demographics.d.ts.map +1 -0
  32. package/dist/lib/fhir-converter/cascade-to-fhir-demographics.js +115 -0
  33. package/dist/lib/fhir-converter/cascade-to-fhir-demographics.js.map +1 -0
  34. package/dist/lib/fhir-converter/cascade-to-fhir.d.ts +9 -3
  35. package/dist/lib/fhir-converter/cascade-to-fhir.d.ts.map +1 -1
  36. package/dist/lib/fhir-converter/cascade-to-fhir.js +69 -290
  37. package/dist/lib/fhir-converter/cascade-to-fhir.js.map +1 -1
  38. package/dist/lib/fhir-converter/converters-clinical-admin.d.ts +16 -0
  39. package/dist/lib/fhir-converter/converters-clinical-admin.d.ts.map +1 -0
  40. package/dist/lib/fhir-converter/converters-clinical-admin.js +166 -0
  41. package/dist/lib/fhir-converter/converters-clinical-admin.js.map +1 -0
  42. package/dist/lib/fhir-converter/converters-clinical.d.ts +28 -0
  43. package/dist/lib/fhir-converter/converters-clinical.d.ts.map +1 -1
  44. package/dist/lib/fhir-converter/converters-clinical.js +436 -11
  45. package/dist/lib/fhir-converter/converters-clinical.js.map +1 -1
  46. package/dist/lib/fhir-converter/converters-demographics.d.ts.map +1 -1
  47. package/dist/lib/fhir-converter/converters-demographics.js +4 -5
  48. package/dist/lib/fhir-converter/converters-demographics.js.map +1 -1
  49. package/dist/lib/fhir-converter/converters-passthrough.d.ts +29 -0
  50. package/dist/lib/fhir-converter/converters-passthrough.d.ts.map +1 -0
  51. package/dist/lib/fhir-converter/converters-passthrough.js +86 -0
  52. package/dist/lib/fhir-converter/converters-passthrough.js.map +1 -0
  53. package/dist/lib/fhir-converter/fhir-to-cascade.d.ts +8 -4
  54. package/dist/lib/fhir-converter/fhir-to-cascade.d.ts.map +1 -1
  55. package/dist/lib/fhir-converter/fhir-to-cascade.js +41 -10
  56. package/dist/lib/fhir-converter/fhir-to-cascade.js.map +1 -1
  57. package/dist/lib/fhir-converter/import-manifest.d.ts +40 -0
  58. package/dist/lib/fhir-converter/import-manifest.d.ts.map +1 -0
  59. package/dist/lib/fhir-converter/import-manifest.js +66 -0
  60. package/dist/lib/fhir-converter/import-manifest.js.map +1 -0
  61. package/dist/lib/fhir-converter/index.d.ts +33 -13
  62. package/dist/lib/fhir-converter/index.d.ts.map +1 -1
  63. package/dist/lib/fhir-converter/index.js +53 -17
  64. package/dist/lib/fhir-converter/index.js.map +1 -1
  65. package/dist/lib/fhir-converter/types.d.ts +12 -1
  66. package/dist/lib/fhir-converter/types.d.ts.map +1 -1
  67. package/dist/lib/fhir-converter/types.js +67 -2
  68. package/dist/lib/fhir-converter/types.js.map +1 -1
  69. package/dist/lib/output.d.ts +5 -0
  70. package/dist/lib/output.d.ts.map +1 -1
  71. package/dist/lib/output.js +6 -1
  72. package/dist/lib/output.js.map +1 -1
  73. package/dist/lib/reconciler.d.ts +45 -0
  74. package/dist/lib/reconciler.d.ts.map +1 -0
  75. package/dist/lib/reconciler.js +397 -0
  76. package/dist/lib/reconciler.js.map +1 -0
  77. package/dist/shapes/checkup.shapes.ttl +10 -0
  78. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cascade-to-fhir-admin.d.ts","sourceRoot":"","sources":["../../../src/lib/fhir-converter/cascade-to-fhir-admin.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,KAAK,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;AAChC,KAAK,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAMxC,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,YAAY,CAyB5E;AAMD,wBAAgB,uBAAuB,CAAC,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,YAAY,CA8BjF"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Cascade -> FHIR reverse converters for administrative/financial types.
3
+ *
4
+ * Handles:
5
+ * coverage:ClaimRecord -> Claim
6
+ * coverage:BenefitStatement -> ExplanationOfBenefit
7
+ */
8
+ import { NS } from './types.js';
9
+ // ---------------------------------------------------------------------------
10
+ // Claim
11
+ // ---------------------------------------------------------------------------
12
+ export function restoreClaimRecord(pv, _warnings) {
13
+ const getFirst = (pred) => pv.get(pred)?.[0];
14
+ const fhirResource = {
15
+ resourceType: 'Claim',
16
+ status: getFirst(NS.coverage + 'claimStatus') ?? 'active',
17
+ use: 'claim',
18
+ };
19
+ const claimDate = getFirst(NS.coverage + 'claimDate');
20
+ if (claimDate)
21
+ fhirResource.created = claimDate;
22
+ const claimType = getFirst(NS.coverage + 'claimType');
23
+ if (claimType)
24
+ fhirResource.type = { coding: [{ code: claimType }] };
25
+ const provider = getFirst(NS.coverage + 'billingProvider');
26
+ if (provider)
27
+ fhirResource.provider = { display: provider };
28
+ const total = getFirst(NS.coverage + 'claimTotal');
29
+ if (total)
30
+ fhirResource.total = { value: parseFloat(total) };
31
+ const srcId = getFirst(NS.coverage + 'sourceRecordId');
32
+ if (srcId)
33
+ fhirResource.id = srcId;
34
+ return fhirResource;
35
+ }
36
+ // ---------------------------------------------------------------------------
37
+ // Explanation of Benefit
38
+ // ---------------------------------------------------------------------------
39
+ export function restoreBenefitStatement(pv, _warnings) {
40
+ const getFirst = (pred) => pv.get(pred)?.[0];
41
+ const fhirResource = {
42
+ resourceType: 'ExplanationOfBenefit',
43
+ status: getFirst(NS.coverage + 'adjudicationStatus') ?? 'active',
44
+ use: 'claim',
45
+ outcome: getFirst(NS.coverage + 'outcomeCode') ?? 'complete',
46
+ };
47
+ const adjDate = getFirst(NS.coverage + 'adjudicationDate');
48
+ if (adjDate)
49
+ fhirResource.created = adjDate;
50
+ const denialReason = getFirst(NS.coverage + 'denialReason');
51
+ if (denialReason)
52
+ fhirResource.adjudication = [{ reason: { text: denialReason } }];
53
+ const totalBilled = getFirst(NS.coverage + 'totalBilled');
54
+ const totalPaid = getFirst(NS.coverage + 'totalPaid');
55
+ const totalArr = [];
56
+ if (totalBilled)
57
+ totalArr.push({ category: { coding: [{ code: 'submitted' }] }, amount: { value: parseFloat(totalBilled) } });
58
+ if (totalPaid)
59
+ totalArr.push({ category: { coding: [{ code: 'benefit' }] }, amount: { value: parseFloat(totalPaid) } });
60
+ if (totalArr.length > 0)
61
+ fhirResource.total = totalArr;
62
+ const claimRef = getFirst(NS.coverage + 'relatedClaim');
63
+ if (claimRef)
64
+ fhirResource.claim = { reference: claimRef };
65
+ const srcId = getFirst(NS.coverage + 'sourceRecordId');
66
+ if (srcId)
67
+ fhirResource.id = srcId;
68
+ return fhirResource;
69
+ }
70
+ //# sourceMappingURL=cascade-to-fhir-admin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cascade-to-fhir-admin.js","sourceRoot":"","sources":["../../../src/lib/fhir-converter/cascade-to-fhir-admin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Cascade -> FHIR reverse converters for clinical record types.
3
+ *
4
+ * Each function receives a predicate-value map (pv) for a single RDF subject
5
+ * and returns a FHIR R4 resource object, or null if the type is not handled here.
6
+ *
7
+ * Handles:
8
+ * health:MedicationRecord -> MedicationStatement
9
+ * health:ConditionRecord -> Condition
10
+ * health:AllergyRecord -> AllergyIntolerance
11
+ * health:LabResultRecord -> Observation (lab)
12
+ * clinical:VitalSign -> Observation (vital-signs)
13
+ * clinical:Procedure -> Procedure
14
+ * clinical:ClinicalDocument -> DocumentReference
15
+ * clinical:Encounter -> Encounter
16
+ * clinical:LaboratoryReport -> DiagnosticReport
17
+ * clinical:MedicationAdministration -> MedicationAdministration
18
+ * clinical:ImplantedDevice -> Device
19
+ * clinical:ImagingStudy -> ImagingStudy
20
+ */
21
+ type PV = Map<string, string[]>;
22
+ type FhirResource = Record<string, any>;
23
+ export declare function restoreMedicationRecord(pv: PV, warnings: string[]): FhirResource;
24
+ export declare function restoreConditionRecord(pv: PV, _warnings: string[]): FhirResource;
25
+ export declare function restoreAllergyRecord(pv: PV, _warnings: string[]): FhirResource;
26
+ export declare function restoreLabResultRecord(pv: PV, _warnings: string[]): FhirResource;
27
+ export declare function restoreVitalSign(pv: PV, warnings: string[]): FhirResource;
28
+ export declare function restoreProcedure(pv: PV, _warnings: string[]): FhirResource;
29
+ export declare function restoreClinicalDocument(pv: PV, _warnings: string[]): FhirResource;
30
+ export declare function restoreEncounter(pv: PV, _warnings: string[]): FhirResource;
31
+ export declare function restoreLaboratoryReport(pv: PV, _warnings: string[]): FhirResource;
32
+ export declare function restoreMedicationAdministration(pv: PV, _warnings: string[]): FhirResource;
33
+ export declare function restoreImplantedDevice(pv: PV, _warnings: string[]): FhirResource;
34
+ export declare function restoreImagingStudy(pv: PV, _warnings: string[]): FhirResource;
35
+ export {};
36
+ //# sourceMappingURL=cascade-to-fhir-clinical.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cascade-to-fhir-clinical.d.ts","sourceRoot":"","sources":["../../../src/lib/fhir-converter/cascade-to-fhir-clinical.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAIH,KAAK,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;AAChC,KAAK,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAMxC,wBAAgB,uBAAuB,CAAC,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,YAAY,CA8ChF;AAMD,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,YAAY,CA+BhF;AAMD,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,YAAY,CA2B9E;AAMD,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,YAAY,CAwChF;AAMD,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,YAAY,CAmCzE;AAMD,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,YAAY,CAwB1E;AAMD,wBAAgB,uBAAuB,CAAC,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,YAAY,CA2BjF;AAMD,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,YAAY,CAgC1E;AAMD,wBAAgB,uBAAuB,CAAC,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,YAAY,CAyBjF;AAMD,wBAAgB,+BAA+B,CAAC,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,YAAY,CAwBzF;AAMD,wBAAgB,sBAAsB,CAAC,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,YAAY,CAwBhF;AAMD,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,YAAY,CAwB7E"}
@@ -0,0 +1,407 @@
1
+ /**
2
+ * Cascade -> FHIR reverse converters for clinical record types.
3
+ *
4
+ * Each function receives a predicate-value map (pv) for a single RDF subject
5
+ * and returns a FHIR R4 resource object, or null if the type is not handled here.
6
+ *
7
+ * Handles:
8
+ * health:MedicationRecord -> MedicationStatement
9
+ * health:ConditionRecord -> Condition
10
+ * health:AllergyRecord -> AllergyIntolerance
11
+ * health:LabResultRecord -> Observation (lab)
12
+ * clinical:VitalSign -> Observation (vital-signs)
13
+ * clinical:Procedure -> Procedure
14
+ * clinical:ClinicalDocument -> DocumentReference
15
+ * clinical:Encounter -> Encounter
16
+ * clinical:LaboratoryReport -> DiagnosticReport
17
+ * clinical:MedicationAdministration -> MedicationAdministration
18
+ * clinical:ImplantedDevice -> Device
19
+ * clinical:ImagingStudy -> ImagingStudy
20
+ */
21
+ import { NS } from './types.js';
22
+ // ---------------------------------------------------------------------------
23
+ // Medications
24
+ // ---------------------------------------------------------------------------
25
+ export function restoreMedicationRecord(pv, warnings) {
26
+ const getFirst = (pred) => pv.get(pred)?.[0];
27
+ const fhirResource = {
28
+ resourceType: 'MedicationStatement',
29
+ status: 'active',
30
+ medicationCodeableConcept: { text: getFirst(NS.health + 'medicationName') ?? '' },
31
+ };
32
+ const isActive = getFirst(NS.health + 'isActive');
33
+ if (isActive === 'false')
34
+ fhirResource.status = 'stopped';
35
+ const drugCodes = pv.get(NS.clinical + 'drugCode') ?? [];
36
+ const codingArr = [];
37
+ for (const uri of drugCodes) {
38
+ if (uri.startsWith(NS.rxnorm)) {
39
+ codingArr.push({ system: 'http://www.nlm.nih.gov/research/umls/rxnorm', code: uri.slice(NS.rxnorm.length) });
40
+ }
41
+ else if (uri.startsWith(NS.sct)) {
42
+ codingArr.push({ system: 'http://snomed.info/sct', code: uri.slice(NS.sct.length) });
43
+ }
44
+ }
45
+ if (codingArr.length > 0)
46
+ fhirResource.medicationCodeableConcept.coding = codingArr;
47
+ const doseText = getFirst(NS.health + 'dose');
48
+ if (doseText)
49
+ fhirResource.dosage = [{ text: doseText }];
50
+ const startDate = getFirst(NS.health + 'startDate');
51
+ const endDate = getFirst(NS.health + 'endDate');
52
+ if (startDate || endDate) {
53
+ fhirResource.effectivePeriod = {};
54
+ if (startDate)
55
+ fhirResource.effectivePeriod.start = startDate;
56
+ if (endDate)
57
+ fhirResource.effectivePeriod.end = endDate;
58
+ }
59
+ const srcId = getFirst(NS.health + 'sourceRecordId');
60
+ if (srcId)
61
+ fhirResource.id = srcId;
62
+ // Warn about Cascade-only fields with no FHIR equivalent
63
+ for (const field of [NS.clinical + 'provenanceClass', NS.clinical + 'clinicalIntent',
64
+ NS.cascade + 'schemaVersion', NS.health + 'medicationClass']) {
65
+ if (getFirst(field)) {
66
+ warnings.push(`Cascade field '${field.split('#')[1] ?? field}' has no FHIR equivalent and was not included in output`);
67
+ }
68
+ }
69
+ return fhirResource;
70
+ }
71
+ // ---------------------------------------------------------------------------
72
+ // Conditions
73
+ // ---------------------------------------------------------------------------
74
+ export function restoreConditionRecord(pv, _warnings) {
75
+ const getFirst = (pred) => pv.get(pred)?.[0];
76
+ const fhirResource = {
77
+ resourceType: 'Condition',
78
+ code: { text: getFirst(NS.health + 'conditionName') ?? '' },
79
+ };
80
+ const status = getFirst(NS.health + 'status');
81
+ if (status) {
82
+ fhirResource.clinicalStatus = {
83
+ coding: [{ system: 'http://terminology.hl7.org/CodeSystem/condition-clinical', code: status }],
84
+ };
85
+ }
86
+ const onset = getFirst(NS.health + 'onsetDate');
87
+ if (onset)
88
+ fhirResource.onsetDateTime = onset;
89
+ const codingArr = [];
90
+ for (const uri of pv.get(NS.health + 'icd10Code') ?? []) {
91
+ codingArr.push({ system: 'http://hl7.org/fhir/sid/icd-10-cm', code: uri.startsWith(NS.icd10) ? uri.slice(NS.icd10.length) : uri });
92
+ }
93
+ for (const uri of pv.get(NS.health + 'snomedCode') ?? []) {
94
+ codingArr.push({ system: 'http://snomed.info/sct', code: uri.startsWith(NS.sct) ? uri.slice(NS.sct.length) : uri });
95
+ }
96
+ if (codingArr.length > 0)
97
+ fhirResource.code.coding = codingArr;
98
+ const srcId = getFirst(NS.health + 'sourceRecordId');
99
+ if (srcId)
100
+ fhirResource.id = srcId;
101
+ return fhirResource;
102
+ }
103
+ // ---------------------------------------------------------------------------
104
+ // Allergies
105
+ // ---------------------------------------------------------------------------
106
+ export function restoreAllergyRecord(pv, _warnings) {
107
+ const getFirst = (pred) => pv.get(pred)?.[0];
108
+ const fhirResource = {
109
+ resourceType: 'AllergyIntolerance',
110
+ code: { text: getFirst(NS.health + 'allergen') ?? '' },
111
+ };
112
+ const cat = getFirst(NS.health + 'allergyCategory');
113
+ if (cat)
114
+ fhirResource.category = [cat];
115
+ const severity = getFirst(NS.health + 'allergySeverity');
116
+ const reaction = getFirst(NS.health + 'reaction');
117
+ if (reaction || severity) {
118
+ const rxn = {};
119
+ if (reaction)
120
+ rxn.manifestation = [{ text: reaction }];
121
+ if (severity)
122
+ rxn.severity = severity;
123
+ fhirResource.reaction = [rxn];
124
+ }
125
+ const onset = getFirst(NS.health + 'onsetDate');
126
+ if (onset)
127
+ fhirResource.onsetDateTime = onset;
128
+ const srcId = getFirst(NS.health + 'sourceRecordId');
129
+ if (srcId)
130
+ fhirResource.id = srcId;
131
+ return fhirResource;
132
+ }
133
+ // ---------------------------------------------------------------------------
134
+ // Lab results (Observation)
135
+ // ---------------------------------------------------------------------------
136
+ export function restoreLabResultRecord(pv, _warnings) {
137
+ const getFirst = (pred) => pv.get(pred)?.[0];
138
+ const fhirResource = {
139
+ resourceType: 'Observation',
140
+ code: { text: getFirst(NS.health + 'testName') ?? '' },
141
+ category: [{ coding: [{ code: 'laboratory' }] }],
142
+ };
143
+ const codingArr = [];
144
+ for (const uri of pv.get(NS.health + 'testCode') ?? []) {
145
+ codingArr.push({ system: 'http://loinc.org', code: uri.startsWith(NS.loinc) ? uri.slice(NS.loinc.length) : uri });
146
+ }
147
+ if (codingArr.length > 0)
148
+ fhirResource.code.coding = codingArr;
149
+ const resultVal = getFirst(NS.health + 'resultValue');
150
+ const resultUnit = getFirst(NS.health + 'resultUnit');
151
+ if (resultVal) {
152
+ const numVal = parseFloat(resultVal);
153
+ if (!isNaN(numVal)) {
154
+ fhirResource.valueQuantity = { value: numVal };
155
+ if (resultUnit)
156
+ fhirResource.valueQuantity.unit = resultUnit;
157
+ }
158
+ else {
159
+ fhirResource.valueString = resultVal;
160
+ }
161
+ }
162
+ const perfDate = getFirst(NS.health + 'performedDate');
163
+ if (perfDate)
164
+ fhirResource.effectiveDateTime = perfDate;
165
+ const interp = getFirst(NS.health + 'interpretation');
166
+ if (interp) {
167
+ const revInterpMap = { normal: 'N', abnormal: 'A', critical: 'HH', unknown: 'UNK' };
168
+ fhirResource.interpretation = [{ coding: [{ code: revInterpMap[interp] ?? interp }] }];
169
+ }
170
+ const srcId = getFirst(NS.health + 'sourceRecordId');
171
+ if (srcId)
172
+ fhirResource.id = srcId;
173
+ return fhirResource;
174
+ }
175
+ // ---------------------------------------------------------------------------
176
+ // Vital signs (Observation)
177
+ // ---------------------------------------------------------------------------
178
+ export function restoreVitalSign(pv, warnings) {
179
+ const getFirst = (pred) => pv.get(pred)?.[0];
180
+ const fhirResource = {
181
+ resourceType: 'Observation',
182
+ code: {},
183
+ category: [{ coding: [{ system: 'http://terminology.hl7.org/CodeSystem/observation-category', code: 'vital-signs' }] }],
184
+ };
185
+ const loincUri = getFirst(NS.clinical + 'loincCode');
186
+ if (loincUri) {
187
+ const code = loincUri.startsWith(NS.loinc) ? loincUri.slice(NS.loinc.length) : loincUri;
188
+ fhirResource.code.coding = [{ system: 'http://loinc.org', code }];
189
+ }
190
+ const vitalName = getFirst(NS.clinical + 'vitalTypeName');
191
+ if (vitalName)
192
+ fhirResource.code.text = vitalName;
193
+ const value = getFirst(NS.clinical + 'value');
194
+ const unit = getFirst(NS.clinical + 'unit');
195
+ if (value) {
196
+ fhirResource.valueQuantity = { value: parseFloat(value) };
197
+ if (unit)
198
+ fhirResource.valueQuantity.unit = unit;
199
+ }
200
+ const effDate = getFirst(NS.clinical + 'effectiveDate');
201
+ if (effDate)
202
+ fhirResource.effectiveDateTime = effDate;
203
+ const srcId = getFirst(NS.health + 'sourceRecordId');
204
+ if (srcId)
205
+ fhirResource.id = srcId;
206
+ if (getFirst(NS.clinical + 'snomedCode')) {
207
+ warnings.push("Cascade field 'snomedCode' has no standard FHIR Observation field and was not included");
208
+ }
209
+ return fhirResource;
210
+ }
211
+ // ---------------------------------------------------------------------------
212
+ // Procedure
213
+ // ---------------------------------------------------------------------------
214
+ export function restoreProcedure(pv, _warnings) {
215
+ const getFirst = (pred) => pv.get(pred)?.[0];
216
+ const fhirResource = {
217
+ resourceType: 'Procedure',
218
+ code: { text: getFirst(NS.clinical + 'procedureName') ?? '' },
219
+ };
220
+ const status = getFirst(NS.clinical + 'procedureStatus');
221
+ if (status)
222
+ fhirResource.status = status;
223
+ const performedDate = getFirst(NS.clinical + 'performedDate');
224
+ if (performedDate)
225
+ fhirResource.performedDateTime = performedDate;
226
+ const srcId = getFirst(NS.clinical + 'sourceRecordId');
227
+ if (srcId)
228
+ fhirResource.id = srcId;
229
+ const snomedUri = pv.get(NS.clinical + 'procedureSnomedCode')?.[0];
230
+ if (snomedUri) {
231
+ const code = snomedUri.startsWith(NS.sct) ? snomedUri.slice(NS.sct.length) : snomedUri;
232
+ fhirResource.code.coding = [{ system: 'http://snomed.info/sct', code }];
233
+ }
234
+ return fhirResource;
235
+ }
236
+ // ---------------------------------------------------------------------------
237
+ // Clinical document (DocumentReference)
238
+ // ---------------------------------------------------------------------------
239
+ export function restoreClinicalDocument(pv, _warnings) {
240
+ const getFirst = (pred) => pv.get(pred)?.[0];
241
+ const fhirResource = {
242
+ resourceType: 'DocumentReference',
243
+ status: 'current',
244
+ type: { text: getFirst(NS.clinical + 'documentType') ?? '' },
245
+ };
246
+ const docDate = getFirst(NS.clinical + 'documentDate');
247
+ if (docDate)
248
+ fhirResource.date = docDate;
249
+ const contentType = getFirst(NS.clinical + 'contentType');
250
+ const docUrl = getFirst(NS.clinical + 'documentUrl');
251
+ const docTitle = getFirst(NS.clinical + 'documentTitle');
252
+ if (contentType || docUrl || docTitle) {
253
+ const attachment = {};
254
+ if (contentType)
255
+ attachment.contentType = contentType;
256
+ if (docUrl)
257
+ attachment.url = docUrl;
258
+ if (docTitle)
259
+ attachment.title = docTitle;
260
+ fhirResource.content = [{ attachment }];
261
+ }
262
+ const srcId = getFirst(NS.clinical + 'sourceRecordId');
263
+ if (srcId)
264
+ fhirResource.id = srcId;
265
+ return fhirResource;
266
+ }
267
+ // ---------------------------------------------------------------------------
268
+ // Encounter
269
+ // ---------------------------------------------------------------------------
270
+ export function restoreEncounter(pv, _warnings) {
271
+ const getFirst = (pred) => pv.get(pred)?.[0];
272
+ const fhirResource = {
273
+ resourceType: 'Encounter',
274
+ status: getFirst(NS.clinical + 'encounterStatus') ?? 'finished',
275
+ };
276
+ const encClass = getFirst(NS.clinical + 'encounterClass');
277
+ if (encClass)
278
+ fhirResource.class = { code: encClass };
279
+ const encType = getFirst(NS.clinical + 'encounterType');
280
+ if (encType)
281
+ fhirResource.type = [{ text: encType }];
282
+ const start = getFirst(NS.clinical + 'encounterStart');
283
+ const end = getFirst(NS.clinical + 'encounterEnd');
284
+ if (start || end) {
285
+ fhirResource.period = {};
286
+ if (start)
287
+ fhirResource.period.start = start;
288
+ if (end)
289
+ fhirResource.period.end = end;
290
+ }
291
+ const provName = getFirst(NS.clinical + 'providerName');
292
+ if (provName)
293
+ fhirResource.participant = [{ individual: { display: provName } }];
294
+ const facility = getFirst(NS.clinical + 'facilityName');
295
+ if (facility)
296
+ fhirResource.serviceProvider = { display: facility };
297
+ const srcId = getFirst(NS.clinical + 'sourceRecordId');
298
+ if (srcId)
299
+ fhirResource.id = srcId;
300
+ return fhirResource;
301
+ }
302
+ // ---------------------------------------------------------------------------
303
+ // Laboratory report (DiagnosticReport)
304
+ // ---------------------------------------------------------------------------
305
+ export function restoreLaboratoryReport(pv, _warnings) {
306
+ const getFirst = (pred) => pv.get(pred)?.[0];
307
+ const fhirResource = {
308
+ resourceType: 'DiagnosticReport',
309
+ status: 'final',
310
+ code: { text: getFirst(NS.clinical + 'panelName') ?? '' },
311
+ };
312
+ const loincUri = getFirst(NS.clinical + 'loincCode');
313
+ if (loincUri) {
314
+ const code = loincUri.startsWith(NS.loinc) ? loincUri.slice(NS.loinc.length) : loincUri;
315
+ fhirResource.code.coding = [{ system: 'http://loinc.org', code }];
316
+ }
317
+ const category = getFirst(NS.clinical + 'reportCategory');
318
+ if (category)
319
+ fhirResource.category = [{ coding: [{ code: category }] }];
320
+ const effDate = getFirst(NS.clinical + 'performedDate');
321
+ if (effDate)
322
+ fhirResource.effectiveDateTime = effDate;
323
+ const srcId = getFirst(NS.clinical + 'sourceRecordId');
324
+ if (srcId)
325
+ fhirResource.id = srcId;
326
+ return fhirResource;
327
+ }
328
+ // ---------------------------------------------------------------------------
329
+ // Medication administration
330
+ // ---------------------------------------------------------------------------
331
+ export function restoreMedicationAdministration(pv, _warnings) {
332
+ const getFirst = (pred) => pv.get(pred)?.[0];
333
+ const fhirResource = {
334
+ resourceType: 'MedicationAdministration',
335
+ status: getFirst(NS.clinical + 'administrationStatus') ?? 'completed',
336
+ medicationCodeableConcept: { text: getFirst(NS.health + 'medicationName') ?? '' },
337
+ };
338
+ const adminDate = getFirst(NS.clinical + 'administeredDate');
339
+ if (adminDate)
340
+ fhirResource.effectiveDateTime = adminDate;
341
+ const dose = getFirst(NS.clinical + 'administeredDose');
342
+ const route = getFirst(NS.clinical + 'administeredRoute');
343
+ if (dose || route) {
344
+ fhirResource.dosage = {};
345
+ if (dose)
346
+ fhirResource.dosage.dose = { value: dose };
347
+ if (route)
348
+ fhirResource.dosage.route = { text: route };
349
+ }
350
+ const srcId = getFirst(NS.clinical + 'sourceRecordId');
351
+ if (srcId)
352
+ fhirResource.id = srcId;
353
+ return fhirResource;
354
+ }
355
+ // ---------------------------------------------------------------------------
356
+ // Implanted device
357
+ // ---------------------------------------------------------------------------
358
+ export function restoreImplantedDevice(pv, _warnings) {
359
+ const getFirst = (pred) => pv.get(pred)?.[0];
360
+ const fhirResource = {
361
+ resourceType: 'Device',
362
+ status: getFirst(NS.clinical + 'deviceStatus') ?? 'active',
363
+ };
364
+ const deviceType = getFirst(NS.clinical + 'deviceType');
365
+ if (deviceType)
366
+ fhirResource.type = { text: deviceType };
367
+ const manufacturer = getFirst(NS.clinical + 'deviceManufacturer');
368
+ if (manufacturer)
369
+ fhirResource.manufacturer = manufacturer;
370
+ const udi = getFirst(NS.clinical + 'udiCarrier');
371
+ if (udi)
372
+ fhirResource.udiCarrier = [{ deviceIdentifier: udi }];
373
+ const implantDate = getFirst(NS.clinical + 'implantDate');
374
+ if (implantDate)
375
+ fhirResource.manufactureDate = implantDate;
376
+ const srcId = getFirst(NS.clinical + 'sourceRecordId');
377
+ if (srcId)
378
+ fhirResource.id = srcId;
379
+ return fhirResource;
380
+ }
381
+ // ---------------------------------------------------------------------------
382
+ // Imaging study
383
+ // ---------------------------------------------------------------------------
384
+ export function restoreImagingStudy(pv, _warnings) {
385
+ const getFirst = (pred) => pv.get(pred)?.[0];
386
+ const fhirResource = {
387
+ resourceType: 'ImagingStudy',
388
+ status: 'available',
389
+ };
390
+ const modality = getFirst(NS.clinical + 'imagingModality');
391
+ const description = getFirst(NS.clinical + 'studyDescription');
392
+ if (description)
393
+ fhirResource.description = description;
394
+ const studyDate = getFirst(NS.clinical + 'studyDate');
395
+ if (studyDate)
396
+ fhirResource.started = studyDate;
397
+ const dicomUid = getFirst(NS.clinical + 'dicomStudyUid');
398
+ if (dicomUid)
399
+ fhirResource.identifier = [{ value: dicomUid }];
400
+ if (modality)
401
+ fhirResource.series = [{ modality: { code: modality } }];
402
+ const srcId = getFirst(NS.clinical + 'sourceRecordId');
403
+ if (srcId)
404
+ fhirResource.id = srcId;
405
+ return fhirResource;
406
+ }
407
+ //# sourceMappingURL=cascade-to-fhir-clinical.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cascade-to-fhir-clinical.js","sourceRoot":"","sources":["../../../src/lib/fhir-converter/cascade-to-fhir-clinical.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Cascade -> FHIR reverse converters for demographic and administrative types.
3
+ *
4
+ * Handles:
5
+ * cascade:PatientProfile -> Patient
6
+ * health:ImmunizationRecord -> Immunization
7
+ * coverage:InsurancePlan -> Coverage
8
+ */
9
+ type PV = Map<string, string[]>;
10
+ type FhirResource = Record<string, any>;
11
+ export declare function restorePatientProfile(pv: PV, warnings: string[]): FhirResource;
12
+ export declare function restoreImmunizationRecord(pv: PV, _warnings: string[]): FhirResource;
13
+ export declare function restoreInsurancePlan(pv: PV, _warnings: string[]): FhirResource;
14
+ export {};
15
+ //# sourceMappingURL=cascade-to-fhir-demographics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cascade-to-fhir-demographics.d.ts","sourceRoot":"","sources":["../../../src/lib/fhir-converter/cascade-to-fhir-demographics.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,KAAK,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;AAChC,KAAK,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAMxC,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,YAAY,CAoC9E;AAMD,wBAAgB,yBAAyB,CAAC,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,YAAY,CA4BnF;AAMD,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,YAAY,CAoC9E"}