@metriport/fhir-sdk 1.12.0 → 2.0.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.
- package/dist/__tests__/audit-reference-methods.test.d.ts +2 -0
- package/dist/__tests__/audit-reference-methods.test.d.ts.map +1 -0
- package/dist/__tests__/audit-reference-methods.test.js +911 -0
- package/dist/__tests__/audit-reference-methods.test.js.map +1 -0
- package/dist/__tests__/careplan.test.js +8 -8
- package/dist/__tests__/careplan.test.js.map +1 -1
- package/dist/__tests__/contained-references.test.d.ts +2 -0
- package/dist/__tests__/contained-references.test.d.ts.map +1 -0
- package/dist/__tests__/contained-references.test.js +77 -0
- package/dist/__tests__/contained-references.test.js.map +1 -0
- package/dist/__tests__/fixtures/fhir-bundles.d.ts +2 -0
- package/dist/__tests__/fixtures/fhir-bundles.d.ts.map +1 -1
- package/dist/__tests__/fixtures/fhir-bundles.js +69 -1
- package/dist/__tests__/fixtures/fhir-bundles.js.map +1 -1
- package/dist/__tests__/phase5-verification.test.js +6 -6
- package/dist/__tests__/phase5-verification.test.js.map +1 -1
- package/dist/__tests__/reverse-references.test.js +243 -0
- package/dist/__tests__/reverse-references.test.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/internal/reference-utils.d.ts +3 -2
- package/dist/internal/reference-utils.d.ts.map +1 -1
- package/dist/internal/reference-utils.js +5 -7
- package/dist/internal/reference-utils.js.map +1 -1
- package/dist/types/sdk-types.d.ts +7 -3
- package/dist/types/sdk-types.d.ts.map +1 -1
- package/dist/types/sdk-types.js.map +1 -1
- package/dist/types/smart-resources.d.ts +92 -35
- package/dist/types/smart-resources.d.ts.map +1 -1
- package/dist/types/smart-resources.js +94 -35
- package/dist/types/smart-resources.js.map +1 -1
- package/package.json +2 -3
|
@@ -0,0 +1,911 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
4
|
+
/**
|
|
5
|
+
* Tests for reference methods added during the AUDITING_REFERENCE_FIELDS.md gap-fill.
|
|
6
|
+
* Each section covers one resource type and only the newly-added getter methods.
|
|
7
|
+
*/
|
|
8
|
+
const index_1 = require("../index");
|
|
9
|
+
// ---------------------------------------------------------------------------
|
|
10
|
+
// MedicationAdministration
|
|
11
|
+
// ---------------------------------------------------------------------------
|
|
12
|
+
const medAdminBundle = {
|
|
13
|
+
resourceType: "Bundle",
|
|
14
|
+
type: "collection",
|
|
15
|
+
entry: [
|
|
16
|
+
{
|
|
17
|
+
resource: {
|
|
18
|
+
resourceType: "Patient",
|
|
19
|
+
id: "patient-ma",
|
|
20
|
+
},
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
resource: {
|
|
24
|
+
resourceType: "Encounter",
|
|
25
|
+
id: "encounter-ma",
|
|
26
|
+
status: "finished",
|
|
27
|
+
class: { code: "AMB" },
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
resource: {
|
|
32
|
+
resourceType: "Medication",
|
|
33
|
+
id: "medication-ma",
|
|
34
|
+
code: { text: "Aspirin" },
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
resource: {
|
|
39
|
+
resourceType: "Procedure",
|
|
40
|
+
id: "procedure-ma",
|
|
41
|
+
status: "completed",
|
|
42
|
+
subject: { reference: "Patient/patient-ma" },
|
|
43
|
+
code: { text: "IV Insertion" },
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
resource: {
|
|
48
|
+
resourceType: "Condition",
|
|
49
|
+
id: "condition-ma",
|
|
50
|
+
clinicalStatus: { coding: [{ code: "active" }] },
|
|
51
|
+
subject: { reference: "Patient/patient-ma" },
|
|
52
|
+
code: { text: "Pain" },
|
|
53
|
+
},
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
resource: {
|
|
57
|
+
resourceType: "Observation",
|
|
58
|
+
id: "observation-ma",
|
|
59
|
+
status: "final",
|
|
60
|
+
code: { text: "Vital sign" },
|
|
61
|
+
},
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
resource: {
|
|
65
|
+
resourceType: "MedicationRequest",
|
|
66
|
+
id: "medrequest-ma",
|
|
67
|
+
status: "active",
|
|
68
|
+
intent: "order",
|
|
69
|
+
subject: { reference: "Patient/patient-ma" },
|
|
70
|
+
medicationCodeableConcept: { text: "Aspirin" },
|
|
71
|
+
},
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
resource: {
|
|
75
|
+
resourceType: "Device",
|
|
76
|
+
id: "device-ma",
|
|
77
|
+
deviceName: [{ name: "IV Pump", type: "user-friendly-name" }],
|
|
78
|
+
},
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
resource: {
|
|
82
|
+
resourceType: "Provenance",
|
|
83
|
+
id: "provenance-ma",
|
|
84
|
+
recorded: "2024-01-01T00:00:00Z",
|
|
85
|
+
target: [],
|
|
86
|
+
agent: [],
|
|
87
|
+
},
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
resource: {
|
|
91
|
+
resourceType: "MedicationAdministration",
|
|
92
|
+
id: "medadmin-main",
|
|
93
|
+
status: "completed",
|
|
94
|
+
medicationReference: { reference: "Medication/medication-ma" },
|
|
95
|
+
subject: { reference: "Patient/patient-ma" },
|
|
96
|
+
context: { reference: "Encounter/encounter-ma" },
|
|
97
|
+
effectiveDateTime: "2024-01-01T10:00:00Z",
|
|
98
|
+
partOf: [{ reference: "Procedure/procedure-ma" }],
|
|
99
|
+
supportingInformation: [{ reference: "Observation/observation-ma" }],
|
|
100
|
+
reasonReference: [{ reference: "Condition/condition-ma" }],
|
|
101
|
+
request: { reference: "MedicationRequest/medrequest-ma" },
|
|
102
|
+
device: [{ reference: "Device/device-ma" }],
|
|
103
|
+
eventHistory: [{ reference: "Provenance/provenance-ma" }],
|
|
104
|
+
},
|
|
105
|
+
},
|
|
106
|
+
],
|
|
107
|
+
};
|
|
108
|
+
describe("MedicationAdministration new reference methods", () => {
|
|
109
|
+
it("getPartOf resolves to Procedure", async () => {
|
|
110
|
+
const sdk = await index_1.FhirBundleSdk.create(medAdminBundle);
|
|
111
|
+
const ma = sdk.getResourceById("medadmin-main");
|
|
112
|
+
const partOf = ma?.getPartOf?.();
|
|
113
|
+
expect(partOf).toHaveLength(1);
|
|
114
|
+
expect(partOf?.[0]?.resourceType).toBe("Procedure");
|
|
115
|
+
expect(partOf?.[0]?.id).toBe("procedure-ma");
|
|
116
|
+
});
|
|
117
|
+
it("getSupportingInformation resolves to Observation", async () => {
|
|
118
|
+
const sdk = await index_1.FhirBundleSdk.create(medAdminBundle);
|
|
119
|
+
const ma = sdk.getResourceById("medadmin-main");
|
|
120
|
+
const info = ma?.getSupportingInformation?.();
|
|
121
|
+
expect(info).toHaveLength(1);
|
|
122
|
+
expect(info?.[0]?.resourceType).toBe("Observation");
|
|
123
|
+
expect(info?.[0]?.id).toBe("observation-ma");
|
|
124
|
+
});
|
|
125
|
+
it("getReasonReferences resolves to Condition", async () => {
|
|
126
|
+
const sdk = await index_1.FhirBundleSdk.create(medAdminBundle);
|
|
127
|
+
const ma = sdk.getResourceById("medadmin-main");
|
|
128
|
+
const reasons = ma?.getReasonReferences?.();
|
|
129
|
+
expect(reasons).toHaveLength(1);
|
|
130
|
+
expect(reasons?.[0]?.resourceType).toBe("Condition");
|
|
131
|
+
expect(reasons?.[0]?.id).toBe("condition-ma");
|
|
132
|
+
});
|
|
133
|
+
it("getRequest resolves to MedicationRequest", async () => {
|
|
134
|
+
const sdk = await index_1.FhirBundleSdk.create(medAdminBundle);
|
|
135
|
+
const ma = sdk.getResourceById("medadmin-main");
|
|
136
|
+
const request = ma?.getRequest?.();
|
|
137
|
+
expect(request?.resourceType).toBe("MedicationRequest");
|
|
138
|
+
expect(request?.id).toBe("medrequest-ma");
|
|
139
|
+
});
|
|
140
|
+
it("getDevices resolves to Device", async () => {
|
|
141
|
+
const sdk = await index_1.FhirBundleSdk.create(medAdminBundle);
|
|
142
|
+
const ma = sdk.getResourceById("medadmin-main");
|
|
143
|
+
const devices = ma?.getDevices?.();
|
|
144
|
+
expect(devices).toHaveLength(1);
|
|
145
|
+
expect(devices?.[0]?.resourceType).toBe("Device");
|
|
146
|
+
expect(devices?.[0]?.id).toBe("device-ma");
|
|
147
|
+
});
|
|
148
|
+
it("getEventHistory resolves to Provenance", async () => {
|
|
149
|
+
const sdk = await index_1.FhirBundleSdk.create(medAdminBundle);
|
|
150
|
+
const ma = sdk.getResourceById("medadmin-main");
|
|
151
|
+
const history = ma?.getEventHistory?.();
|
|
152
|
+
expect(history).toHaveLength(1);
|
|
153
|
+
expect(history?.[0]?.resourceType).toBe("Provenance");
|
|
154
|
+
expect(history?.[0]?.id).toBe("provenance-ma");
|
|
155
|
+
});
|
|
156
|
+
it("returns empty array for missing optional array fields", async () => {
|
|
157
|
+
const sdk = await index_1.FhirBundleSdk.create({
|
|
158
|
+
resourceType: "Bundle",
|
|
159
|
+
type: "collection",
|
|
160
|
+
entry: [
|
|
161
|
+
{
|
|
162
|
+
resource: {
|
|
163
|
+
resourceType: "Patient",
|
|
164
|
+
id: "patient-ma-min",
|
|
165
|
+
},
|
|
166
|
+
},
|
|
167
|
+
{
|
|
168
|
+
resource: {
|
|
169
|
+
resourceType: "MedicationAdministration",
|
|
170
|
+
id: "medadmin-min",
|
|
171
|
+
status: "completed",
|
|
172
|
+
medicationCodeableConcept: { text: "Aspirin" },
|
|
173
|
+
subject: { reference: "Patient/patient-ma-min" },
|
|
174
|
+
effectiveDateTime: "2024-01-01T10:00:00Z",
|
|
175
|
+
},
|
|
176
|
+
},
|
|
177
|
+
],
|
|
178
|
+
});
|
|
179
|
+
const ma = sdk.getResourceById("medadmin-min");
|
|
180
|
+
const partOf = ma?.getPartOf?.();
|
|
181
|
+
expect(partOf === undefined || partOf.length === 0).toBe(true);
|
|
182
|
+
const supportingInfo = ma?.getSupportingInformation?.();
|
|
183
|
+
expect(supportingInfo === undefined || supportingInfo.length === 0).toBe(true);
|
|
184
|
+
const reasonRef = ma?.getReasonReferences?.();
|
|
185
|
+
expect(reasonRef === undefined || reasonRef.length === 0).toBe(true);
|
|
186
|
+
expect(ma?.getRequest?.()).toBeUndefined();
|
|
187
|
+
const devices = ma?.getDevices?.();
|
|
188
|
+
expect(devices === undefined || devices.length === 0).toBe(true);
|
|
189
|
+
const eventHistory = ma?.getEventHistory?.();
|
|
190
|
+
expect(eventHistory === undefined || eventHistory.length === 0).toBe(true);
|
|
191
|
+
});
|
|
192
|
+
});
|
|
193
|
+
// ---------------------------------------------------------------------------
|
|
194
|
+
// MedicationDispense
|
|
195
|
+
// ---------------------------------------------------------------------------
|
|
196
|
+
const medDispenseBundle = {
|
|
197
|
+
resourceType: "Bundle",
|
|
198
|
+
type: "collection",
|
|
199
|
+
entry: [
|
|
200
|
+
{
|
|
201
|
+
resource: {
|
|
202
|
+
resourceType: "Patient",
|
|
203
|
+
id: "patient-md",
|
|
204
|
+
},
|
|
205
|
+
},
|
|
206
|
+
{
|
|
207
|
+
resource: {
|
|
208
|
+
resourceType: "Procedure",
|
|
209
|
+
id: "procedure-md",
|
|
210
|
+
status: "completed",
|
|
211
|
+
subject: { reference: "Patient/patient-md" },
|
|
212
|
+
code: { text: "Dispense event" },
|
|
213
|
+
},
|
|
214
|
+
},
|
|
215
|
+
{
|
|
216
|
+
resource: {
|
|
217
|
+
resourceType: "DetectedIssue",
|
|
218
|
+
id: "detectedissue-md",
|
|
219
|
+
status: "final",
|
|
220
|
+
patient: { reference: "Patient/patient-md" },
|
|
221
|
+
},
|
|
222
|
+
},
|
|
223
|
+
{
|
|
224
|
+
resource: {
|
|
225
|
+
resourceType: "Location",
|
|
226
|
+
id: "location-md",
|
|
227
|
+
name: "Pharmacy",
|
|
228
|
+
},
|
|
229
|
+
},
|
|
230
|
+
{
|
|
231
|
+
resource: {
|
|
232
|
+
resourceType: "MedicationRequest",
|
|
233
|
+
id: "medrequest-md",
|
|
234
|
+
status: "active",
|
|
235
|
+
intent: "order",
|
|
236
|
+
subject: { reference: "Patient/patient-md" },
|
|
237
|
+
medicationCodeableConcept: { text: "Metformin" },
|
|
238
|
+
},
|
|
239
|
+
},
|
|
240
|
+
{
|
|
241
|
+
resource: {
|
|
242
|
+
resourceType: "Practitioner",
|
|
243
|
+
id: "practitioner-md",
|
|
244
|
+
name: [{ family: "Smith" }],
|
|
245
|
+
},
|
|
246
|
+
},
|
|
247
|
+
{
|
|
248
|
+
resource: {
|
|
249
|
+
resourceType: "Provenance",
|
|
250
|
+
id: "provenance-md",
|
|
251
|
+
recorded: "2024-01-01T00:00:00Z",
|
|
252
|
+
target: [],
|
|
253
|
+
agent: [],
|
|
254
|
+
},
|
|
255
|
+
},
|
|
256
|
+
{
|
|
257
|
+
resource: {
|
|
258
|
+
resourceType: "Medication",
|
|
259
|
+
id: "medication-md",
|
|
260
|
+
code: { text: "Metformin" },
|
|
261
|
+
},
|
|
262
|
+
},
|
|
263
|
+
{
|
|
264
|
+
resource: {
|
|
265
|
+
resourceType: "MedicationDispense",
|
|
266
|
+
id: "meddispense-main",
|
|
267
|
+
status: "completed",
|
|
268
|
+
medicationReference: { reference: "Medication/medication-md" },
|
|
269
|
+
subject: { reference: "Patient/patient-md" },
|
|
270
|
+
partOf: [{ reference: "Procedure/procedure-md" }],
|
|
271
|
+
statusReasonReference: { reference: "DetectedIssue/detectedissue-md" },
|
|
272
|
+
supportingInformation: [{ reference: "Patient/patient-md" }],
|
|
273
|
+
location: { reference: "Location/location-md" },
|
|
274
|
+
authorizingPrescription: [{ reference: "MedicationRequest/medrequest-md" }],
|
|
275
|
+
destination: { reference: "Location/location-md" },
|
|
276
|
+
receiver: [{ reference: "Practitioner/practitioner-md" }],
|
|
277
|
+
detectedIssue: [{ reference: "DetectedIssue/detectedissue-md" }],
|
|
278
|
+
eventHistory: [{ reference: "Provenance/provenance-md" }],
|
|
279
|
+
substitution: {
|
|
280
|
+
wasSubstituted: false,
|
|
281
|
+
responsibleParty: [{ reference: "Practitioner/practitioner-md" }],
|
|
282
|
+
},
|
|
283
|
+
},
|
|
284
|
+
},
|
|
285
|
+
],
|
|
286
|
+
};
|
|
287
|
+
describe("MedicationDispense new reference methods", () => {
|
|
288
|
+
it("getPartOf resolves to Procedure", async () => {
|
|
289
|
+
const sdk = await index_1.FhirBundleSdk.create(medDispenseBundle);
|
|
290
|
+
const md = sdk.getResourceById("meddispense-main");
|
|
291
|
+
const partOf = md?.getPartOf?.();
|
|
292
|
+
expect(partOf).toHaveLength(1);
|
|
293
|
+
expect(partOf?.[0]?.resourceType).toBe("Procedure");
|
|
294
|
+
expect(partOf?.[0]?.id).toBe("procedure-md");
|
|
295
|
+
});
|
|
296
|
+
it("getStatusReasonReference resolves to DetectedIssue", async () => {
|
|
297
|
+
const sdk = await index_1.FhirBundleSdk.create(medDispenseBundle);
|
|
298
|
+
const md = sdk.getResourceById("meddispense-main");
|
|
299
|
+
const reason = md?.getStatusReasonReference?.();
|
|
300
|
+
expect(reason?.resourceType).toBe("DetectedIssue");
|
|
301
|
+
expect(reason?.id).toBe("detectedissue-md");
|
|
302
|
+
});
|
|
303
|
+
it("getSupportingInformation resolves to resources", async () => {
|
|
304
|
+
const sdk = await index_1.FhirBundleSdk.create(medDispenseBundle);
|
|
305
|
+
const md = sdk.getResourceById("meddispense-main");
|
|
306
|
+
const info = md?.getSupportingInformation?.();
|
|
307
|
+
expect(info).toHaveLength(1);
|
|
308
|
+
expect(info?.[0]?.id).toBe("patient-md");
|
|
309
|
+
});
|
|
310
|
+
it("getLocation resolves to Location", async () => {
|
|
311
|
+
const sdk = await index_1.FhirBundleSdk.create(medDispenseBundle);
|
|
312
|
+
const md = sdk.getResourceById("meddispense-main");
|
|
313
|
+
const location = md?.getLocation?.();
|
|
314
|
+
expect(location?.resourceType).toBe("Location");
|
|
315
|
+
expect(location?.id).toBe("location-md");
|
|
316
|
+
});
|
|
317
|
+
it("getAuthorizingPrescriptions resolves to MedicationRequest", async () => {
|
|
318
|
+
const sdk = await index_1.FhirBundleSdk.create(medDispenseBundle);
|
|
319
|
+
const md = sdk.getResourceById("meddispense-main");
|
|
320
|
+
const prescriptions = md?.getAuthorizingPrescriptions?.();
|
|
321
|
+
expect(prescriptions).toHaveLength(1);
|
|
322
|
+
expect(prescriptions?.[0]?.resourceType).toBe("MedicationRequest");
|
|
323
|
+
expect(prescriptions?.[0]?.id).toBe("medrequest-md");
|
|
324
|
+
});
|
|
325
|
+
it("getDestination resolves to Location", async () => {
|
|
326
|
+
const sdk = await index_1.FhirBundleSdk.create(medDispenseBundle);
|
|
327
|
+
const md = sdk.getResourceById("meddispense-main");
|
|
328
|
+
const dest = md?.getDestination?.();
|
|
329
|
+
expect(dest?.resourceType).toBe("Location");
|
|
330
|
+
expect(dest?.id).toBe("location-md");
|
|
331
|
+
});
|
|
332
|
+
it("getReceivers resolves to Practitioner", async () => {
|
|
333
|
+
const sdk = await index_1.FhirBundleSdk.create(medDispenseBundle);
|
|
334
|
+
const md = sdk.getResourceById("meddispense-main");
|
|
335
|
+
const receivers = md?.getReceivers?.();
|
|
336
|
+
expect(receivers).toHaveLength(1);
|
|
337
|
+
expect(receivers?.[0]?.resourceType).toBe("Practitioner");
|
|
338
|
+
expect(receivers?.[0]?.id).toBe("practitioner-md");
|
|
339
|
+
});
|
|
340
|
+
it("getDetectedIssues resolves to DetectedIssue", async () => {
|
|
341
|
+
const sdk = await index_1.FhirBundleSdk.create(medDispenseBundle);
|
|
342
|
+
const md = sdk.getResourceById("meddispense-main");
|
|
343
|
+
const issues = md?.getDetectedIssues?.();
|
|
344
|
+
expect(issues).toHaveLength(1);
|
|
345
|
+
expect(issues?.[0]?.resourceType).toBe("DetectedIssue");
|
|
346
|
+
expect(issues?.[0]?.id).toBe("detectedissue-md");
|
|
347
|
+
});
|
|
348
|
+
it("getEventHistory resolves to Provenance", async () => {
|
|
349
|
+
const sdk = await index_1.FhirBundleSdk.create(medDispenseBundle);
|
|
350
|
+
const md = sdk.getResourceById("meddispense-main");
|
|
351
|
+
const history = md?.getEventHistory?.();
|
|
352
|
+
expect(history).toHaveLength(1);
|
|
353
|
+
expect(history?.[0]?.resourceType).toBe("Provenance");
|
|
354
|
+
expect(history?.[0]?.id).toBe("provenance-md");
|
|
355
|
+
});
|
|
356
|
+
it("getResponsibleParties resolves to Practitioner", async () => {
|
|
357
|
+
const sdk = await index_1.FhirBundleSdk.create(medDispenseBundle);
|
|
358
|
+
const md = sdk.getResourceById("meddispense-main");
|
|
359
|
+
const responsible = md?.getResponsibleParties?.();
|
|
360
|
+
expect(responsible).toHaveLength(1);
|
|
361
|
+
expect(responsible?.[0]?.resourceType).toBe("Practitioner");
|
|
362
|
+
expect(responsible?.[0]?.id).toBe("practitioner-md");
|
|
363
|
+
});
|
|
364
|
+
});
|
|
365
|
+
// ---------------------------------------------------------------------------
|
|
366
|
+
// MedicationStatement
|
|
367
|
+
// ---------------------------------------------------------------------------
|
|
368
|
+
const medStatementBundle = {
|
|
369
|
+
resourceType: "Bundle",
|
|
370
|
+
type: "collection",
|
|
371
|
+
entry: [
|
|
372
|
+
{
|
|
373
|
+
resource: {
|
|
374
|
+
resourceType: "Patient",
|
|
375
|
+
id: "patient-ms",
|
|
376
|
+
},
|
|
377
|
+
},
|
|
378
|
+
{
|
|
379
|
+
resource: {
|
|
380
|
+
resourceType: "MedicationRequest",
|
|
381
|
+
id: "medrequest-ms",
|
|
382
|
+
status: "active",
|
|
383
|
+
intent: "order",
|
|
384
|
+
subject: { reference: "Patient/patient-ms" },
|
|
385
|
+
medicationCodeableConcept: { text: "Lisinopril" },
|
|
386
|
+
},
|
|
387
|
+
},
|
|
388
|
+
{
|
|
389
|
+
resource: {
|
|
390
|
+
resourceType: "Observation",
|
|
391
|
+
id: "observation-ms",
|
|
392
|
+
status: "final",
|
|
393
|
+
code: { text: "BP" },
|
|
394
|
+
},
|
|
395
|
+
},
|
|
396
|
+
{
|
|
397
|
+
resource: {
|
|
398
|
+
resourceType: "Condition",
|
|
399
|
+
id: "condition-ms",
|
|
400
|
+
clinicalStatus: { coding: [{ code: "active" }] },
|
|
401
|
+
subject: { reference: "Patient/patient-ms" },
|
|
402
|
+
code: { text: "Hypertension" },
|
|
403
|
+
},
|
|
404
|
+
},
|
|
405
|
+
{
|
|
406
|
+
resource: {
|
|
407
|
+
resourceType: "Medication",
|
|
408
|
+
id: "medication-ms",
|
|
409
|
+
code: { text: "Lisinopril" },
|
|
410
|
+
},
|
|
411
|
+
},
|
|
412
|
+
{
|
|
413
|
+
resource: {
|
|
414
|
+
resourceType: "MedicationStatement",
|
|
415
|
+
id: "medstatement-main",
|
|
416
|
+
status: "active",
|
|
417
|
+
medicationReference: { reference: "Medication/medication-ms" },
|
|
418
|
+
subject: { reference: "Patient/patient-ms" },
|
|
419
|
+
basedOn: [{ reference: "MedicationRequest/medrequest-ms" }],
|
|
420
|
+
partOf: [{ reference: "Observation/observation-ms" }],
|
|
421
|
+
derivedFrom: [{ reference: "Observation/observation-ms" }],
|
|
422
|
+
reasonReference: [{ reference: "Condition/condition-ms" }],
|
|
423
|
+
},
|
|
424
|
+
},
|
|
425
|
+
],
|
|
426
|
+
};
|
|
427
|
+
describe("MedicationStatement new reference methods", () => {
|
|
428
|
+
it("getBasedOn resolves to MedicationRequest", async () => {
|
|
429
|
+
const sdk = await index_1.FhirBundleSdk.create(medStatementBundle);
|
|
430
|
+
const ms = sdk.getResourceById("medstatement-main");
|
|
431
|
+
const basedOn = ms?.getBasedOn?.();
|
|
432
|
+
expect(basedOn).toHaveLength(1);
|
|
433
|
+
expect(basedOn?.[0]?.resourceType).toBe("MedicationRequest");
|
|
434
|
+
expect(basedOn?.[0]?.id).toBe("medrequest-ms");
|
|
435
|
+
});
|
|
436
|
+
it("getPartOf resolves to Observation", async () => {
|
|
437
|
+
const sdk = await index_1.FhirBundleSdk.create(medStatementBundle);
|
|
438
|
+
const ms = sdk.getResourceById("medstatement-main");
|
|
439
|
+
const partOf = ms?.getPartOf?.();
|
|
440
|
+
expect(partOf).toHaveLength(1);
|
|
441
|
+
expect(partOf?.[0]?.resourceType).toBe("Observation");
|
|
442
|
+
expect(partOf?.[0]?.id).toBe("observation-ms");
|
|
443
|
+
});
|
|
444
|
+
it("getDerivedFrom resolves to Observation", async () => {
|
|
445
|
+
const sdk = await index_1.FhirBundleSdk.create(medStatementBundle);
|
|
446
|
+
const ms = sdk.getResourceById("medstatement-main");
|
|
447
|
+
const derived = ms?.getDerivedFrom?.();
|
|
448
|
+
expect(derived).toHaveLength(1);
|
|
449
|
+
expect(derived?.[0]?.resourceType).toBe("Observation");
|
|
450
|
+
expect(derived?.[0]?.id).toBe("observation-ms");
|
|
451
|
+
});
|
|
452
|
+
it("getReasonReferences resolves to Condition", async () => {
|
|
453
|
+
const sdk = await index_1.FhirBundleSdk.create(medStatementBundle);
|
|
454
|
+
const ms = sdk.getResourceById("medstatement-main");
|
|
455
|
+
const reasons = ms?.getReasonReferences?.();
|
|
456
|
+
expect(reasons).toHaveLength(1);
|
|
457
|
+
expect(reasons?.[0]?.resourceType).toBe("Condition");
|
|
458
|
+
expect(reasons?.[0]?.id).toBe("condition-ms");
|
|
459
|
+
});
|
|
460
|
+
});
|
|
461
|
+
// ---------------------------------------------------------------------------
|
|
462
|
+
// ServiceRequest
|
|
463
|
+
// ---------------------------------------------------------------------------
|
|
464
|
+
const serviceRequestBundle = {
|
|
465
|
+
resourceType: "Bundle",
|
|
466
|
+
type: "collection",
|
|
467
|
+
entry: [
|
|
468
|
+
{
|
|
469
|
+
resource: {
|
|
470
|
+
resourceType: "Patient",
|
|
471
|
+
id: "patient-sr",
|
|
472
|
+
},
|
|
473
|
+
},
|
|
474
|
+
{
|
|
475
|
+
resource: {
|
|
476
|
+
resourceType: "CarePlan",
|
|
477
|
+
id: "careplan-sr",
|
|
478
|
+
status: "active",
|
|
479
|
+
intent: "plan",
|
|
480
|
+
subject: { reference: "Patient/patient-sr" },
|
|
481
|
+
},
|
|
482
|
+
},
|
|
483
|
+
{
|
|
484
|
+
resource: {
|
|
485
|
+
resourceType: "ServiceRequest",
|
|
486
|
+
id: "servicerequest-sr-replaced",
|
|
487
|
+
status: "revoked",
|
|
488
|
+
intent: "order",
|
|
489
|
+
subject: { reference: "Patient/patient-sr" },
|
|
490
|
+
code: { text: "Old blood test" },
|
|
491
|
+
},
|
|
492
|
+
},
|
|
493
|
+
{
|
|
494
|
+
resource: {
|
|
495
|
+
resourceType: "Location",
|
|
496
|
+
id: "location-sr",
|
|
497
|
+
name: "Lab",
|
|
498
|
+
},
|
|
499
|
+
},
|
|
500
|
+
{
|
|
501
|
+
resource: {
|
|
502
|
+
resourceType: "Condition",
|
|
503
|
+
id: "condition-sr",
|
|
504
|
+
clinicalStatus: { coding: [{ code: "active" }] },
|
|
505
|
+
subject: { reference: "Patient/patient-sr" },
|
|
506
|
+
code: { text: "Diabetes" },
|
|
507
|
+
},
|
|
508
|
+
},
|
|
509
|
+
{
|
|
510
|
+
resource: {
|
|
511
|
+
resourceType: "Observation",
|
|
512
|
+
id: "observation-sr",
|
|
513
|
+
status: "final",
|
|
514
|
+
code: { text: "Support info" },
|
|
515
|
+
},
|
|
516
|
+
},
|
|
517
|
+
{
|
|
518
|
+
resource: {
|
|
519
|
+
resourceType: "Specimen",
|
|
520
|
+
id: "specimen-sr",
|
|
521
|
+
status: "available",
|
|
522
|
+
type: { text: "Blood" },
|
|
523
|
+
},
|
|
524
|
+
},
|
|
525
|
+
{
|
|
526
|
+
resource: {
|
|
527
|
+
resourceType: "Provenance",
|
|
528
|
+
id: "provenance-sr",
|
|
529
|
+
recorded: "2024-01-01T00:00:00Z",
|
|
530
|
+
target: [],
|
|
531
|
+
agent: [],
|
|
532
|
+
},
|
|
533
|
+
},
|
|
534
|
+
{
|
|
535
|
+
resource: {
|
|
536
|
+
resourceType: "ServiceRequest",
|
|
537
|
+
id: "servicerequest-main",
|
|
538
|
+
status: "active",
|
|
539
|
+
intent: "order",
|
|
540
|
+
subject: { reference: "Patient/patient-sr" },
|
|
541
|
+
code: { text: "Blood glucose" },
|
|
542
|
+
basedOn: [{ reference: "CarePlan/careplan-sr" }],
|
|
543
|
+
replaces: [{ reference: "ServiceRequest/servicerequest-sr-replaced" }],
|
|
544
|
+
locationReference: [{ reference: "Location/location-sr" }],
|
|
545
|
+
reasonReference: [{ reference: "Condition/condition-sr" }],
|
|
546
|
+
supportingInfo: [{ reference: "Observation/observation-sr" }],
|
|
547
|
+
specimen: [{ reference: "Specimen/specimen-sr" }],
|
|
548
|
+
relevantHistory: [{ reference: "Provenance/provenance-sr" }],
|
|
549
|
+
},
|
|
550
|
+
},
|
|
551
|
+
],
|
|
552
|
+
};
|
|
553
|
+
describe("ServiceRequest new reference methods", () => {
|
|
554
|
+
it("getBasedOn resolves to CarePlan", async () => {
|
|
555
|
+
const sdk = await index_1.FhirBundleSdk.create(serviceRequestBundle);
|
|
556
|
+
const sr = sdk.getResourceById("servicerequest-main");
|
|
557
|
+
const basedOn = sr?.getBasedOn?.();
|
|
558
|
+
expect(basedOn).toHaveLength(1);
|
|
559
|
+
expect(basedOn?.[0]?.resourceType).toBe("CarePlan");
|
|
560
|
+
expect(basedOn?.[0]?.id).toBe("careplan-sr");
|
|
561
|
+
});
|
|
562
|
+
it("getReplaces resolves to ServiceRequest", async () => {
|
|
563
|
+
const sdk = await index_1.FhirBundleSdk.create(serviceRequestBundle);
|
|
564
|
+
const sr = sdk.getResourceById("servicerequest-main");
|
|
565
|
+
const replaces = sr?.getReplaces?.();
|
|
566
|
+
expect(replaces).toHaveLength(1);
|
|
567
|
+
expect(replaces?.[0]?.resourceType).toBe("ServiceRequest");
|
|
568
|
+
expect(replaces?.[0]?.id).toBe("servicerequest-sr-replaced");
|
|
569
|
+
});
|
|
570
|
+
it("getLocationReferences resolves to Location", async () => {
|
|
571
|
+
const sdk = await index_1.FhirBundleSdk.create(serviceRequestBundle);
|
|
572
|
+
const sr = sdk.getResourceById("servicerequest-main");
|
|
573
|
+
const locs = sr?.getLocationReferences?.();
|
|
574
|
+
expect(locs).toHaveLength(1);
|
|
575
|
+
expect(locs?.[0]?.resourceType).toBe("Location");
|
|
576
|
+
expect(locs?.[0]?.id).toBe("location-sr");
|
|
577
|
+
});
|
|
578
|
+
it("getReasonReferences resolves to Condition", async () => {
|
|
579
|
+
const sdk = await index_1.FhirBundleSdk.create(serviceRequestBundle);
|
|
580
|
+
const sr = sdk.getResourceById("servicerequest-main");
|
|
581
|
+
const reasons = sr?.getReasonReferences?.();
|
|
582
|
+
expect(reasons).toHaveLength(1);
|
|
583
|
+
expect(reasons?.[0]?.resourceType).toBe("Condition");
|
|
584
|
+
expect(reasons?.[0]?.id).toBe("condition-sr");
|
|
585
|
+
});
|
|
586
|
+
it("getSupportingInfo resolves to Observation", async () => {
|
|
587
|
+
const sdk = await index_1.FhirBundleSdk.create(serviceRequestBundle);
|
|
588
|
+
const sr = sdk.getResourceById("servicerequest-main");
|
|
589
|
+
const info = sr?.getSupportingInfo?.();
|
|
590
|
+
expect(info).toHaveLength(1);
|
|
591
|
+
expect(info?.[0]?.resourceType).toBe("Observation");
|
|
592
|
+
expect(info?.[0]?.id).toBe("observation-sr");
|
|
593
|
+
});
|
|
594
|
+
it("getSpecimens resolves to Specimen", async () => {
|
|
595
|
+
const sdk = await index_1.FhirBundleSdk.create(serviceRequestBundle);
|
|
596
|
+
const sr = sdk.getResourceById("servicerequest-main");
|
|
597
|
+
const specimens = sr?.getSpecimens?.();
|
|
598
|
+
expect(specimens).toHaveLength(1);
|
|
599
|
+
expect(specimens?.[0]?.resourceType).toBe("Specimen");
|
|
600
|
+
expect(specimens?.[0]?.id).toBe("specimen-sr");
|
|
601
|
+
});
|
|
602
|
+
it("getRelevantHistory resolves to Provenance", async () => {
|
|
603
|
+
const sdk = await index_1.FhirBundleSdk.create(serviceRequestBundle);
|
|
604
|
+
const sr = sdk.getResourceById("servicerequest-main");
|
|
605
|
+
const history = sr?.getRelevantHistory?.();
|
|
606
|
+
expect(history).toHaveLength(1);
|
|
607
|
+
expect(history?.[0]?.resourceType).toBe("Provenance");
|
|
608
|
+
expect(history?.[0]?.id).toBe("provenance-sr");
|
|
609
|
+
});
|
|
610
|
+
});
|
|
611
|
+
// ---------------------------------------------------------------------------
|
|
612
|
+
// RiskAssessment
|
|
613
|
+
// ---------------------------------------------------------------------------
|
|
614
|
+
const riskAssessmentBundle = {
|
|
615
|
+
resourceType: "Bundle",
|
|
616
|
+
type: "collection",
|
|
617
|
+
entry: [
|
|
618
|
+
{
|
|
619
|
+
resource: {
|
|
620
|
+
resourceType: "Patient",
|
|
621
|
+
id: "patient-ra",
|
|
622
|
+
},
|
|
623
|
+
},
|
|
624
|
+
{
|
|
625
|
+
resource: {
|
|
626
|
+
resourceType: "Observation",
|
|
627
|
+
id: "observation-ra",
|
|
628
|
+
status: "final",
|
|
629
|
+
code: { text: "Risk basis" },
|
|
630
|
+
},
|
|
631
|
+
},
|
|
632
|
+
{
|
|
633
|
+
resource: {
|
|
634
|
+
resourceType: "Condition",
|
|
635
|
+
id: "condition-ra",
|
|
636
|
+
clinicalStatus: { coding: [{ code: "active" }] },
|
|
637
|
+
subject: { reference: "Patient/patient-ra" },
|
|
638
|
+
code: { text: "Hypertension" },
|
|
639
|
+
},
|
|
640
|
+
},
|
|
641
|
+
{
|
|
642
|
+
resource: {
|
|
643
|
+
resourceType: "DiagnosticReport",
|
|
644
|
+
id: "diagnosticreport-ra",
|
|
645
|
+
status: "final",
|
|
646
|
+
code: { text: "Lab panel" },
|
|
647
|
+
},
|
|
648
|
+
},
|
|
649
|
+
{
|
|
650
|
+
resource: {
|
|
651
|
+
resourceType: "RiskAssessment",
|
|
652
|
+
id: "riskassessment-parent",
|
|
653
|
+
status: "final",
|
|
654
|
+
subject: { reference: "Patient/patient-ra" },
|
|
655
|
+
prediction: [],
|
|
656
|
+
},
|
|
657
|
+
},
|
|
658
|
+
{
|
|
659
|
+
resource: {
|
|
660
|
+
resourceType: "RiskAssessment",
|
|
661
|
+
id: "riskassessment-main",
|
|
662
|
+
status: "final",
|
|
663
|
+
subject: { reference: "Patient/patient-ra" },
|
|
664
|
+
prediction: [],
|
|
665
|
+
basedOn: { reference: "Observation/observation-ra" },
|
|
666
|
+
parent: { reference: "RiskAssessment/riskassessment-parent" },
|
|
667
|
+
condition: { reference: "Condition/condition-ra" },
|
|
668
|
+
reasonReference: [{ reference: "DiagnosticReport/diagnosticreport-ra" }],
|
|
669
|
+
basis: [{ reference: "Observation/observation-ra" }],
|
|
670
|
+
},
|
|
671
|
+
},
|
|
672
|
+
],
|
|
673
|
+
};
|
|
674
|
+
describe("RiskAssessment new reference methods", () => {
|
|
675
|
+
it("getBasedOn resolves to Observation", async () => {
|
|
676
|
+
const sdk = await index_1.FhirBundleSdk.create(riskAssessmentBundle);
|
|
677
|
+
const ra = sdk.getResourceById("riskassessment-main");
|
|
678
|
+
const basedOn = ra?.getBasedOn?.();
|
|
679
|
+
expect(basedOn?.resourceType).toBe("Observation");
|
|
680
|
+
expect(basedOn?.id).toBe("observation-ra");
|
|
681
|
+
});
|
|
682
|
+
it("getParent resolves to RiskAssessment", async () => {
|
|
683
|
+
const sdk = await index_1.FhirBundleSdk.create(riskAssessmentBundle);
|
|
684
|
+
const ra = sdk.getResourceById("riskassessment-main");
|
|
685
|
+
const parent = ra?.getParent?.();
|
|
686
|
+
expect(parent?.resourceType).toBe("RiskAssessment");
|
|
687
|
+
expect(parent?.id).toBe("riskassessment-parent");
|
|
688
|
+
});
|
|
689
|
+
it("getCondition resolves to Condition", async () => {
|
|
690
|
+
const sdk = await index_1.FhirBundleSdk.create(riskAssessmentBundle);
|
|
691
|
+
const ra = sdk.getResourceById("riskassessment-main");
|
|
692
|
+
const condition = ra?.getCondition?.();
|
|
693
|
+
expect(condition?.resourceType).toBe("Condition");
|
|
694
|
+
expect(condition?.id).toBe("condition-ra");
|
|
695
|
+
});
|
|
696
|
+
it("getReasonReferences resolves to DiagnosticReport", async () => {
|
|
697
|
+
const sdk = await index_1.FhirBundleSdk.create(riskAssessmentBundle);
|
|
698
|
+
const ra = sdk.getResourceById("riskassessment-main");
|
|
699
|
+
const reasons = ra?.getReasonReferences?.();
|
|
700
|
+
expect(reasons).toHaveLength(1);
|
|
701
|
+
expect(reasons?.[0]?.resourceType).toBe("DiagnosticReport");
|
|
702
|
+
expect(reasons?.[0]?.id).toBe("diagnosticreport-ra");
|
|
703
|
+
});
|
|
704
|
+
it("getBasis resolves to Observation", async () => {
|
|
705
|
+
const sdk = await index_1.FhirBundleSdk.create(riskAssessmentBundle);
|
|
706
|
+
const ra = sdk.getResourceById("riskassessment-main");
|
|
707
|
+
const basis = ra?.getBasis?.();
|
|
708
|
+
expect(basis).toHaveLength(1);
|
|
709
|
+
expect(basis?.[0]?.resourceType).toBe("Observation");
|
|
710
|
+
expect(basis?.[0]?.id).toBe("observation-ra");
|
|
711
|
+
});
|
|
712
|
+
it("returns undefined/empty for resources missing optional fields", async () => {
|
|
713
|
+
const sdk = await index_1.FhirBundleSdk.create({
|
|
714
|
+
resourceType: "Bundle",
|
|
715
|
+
type: "collection",
|
|
716
|
+
entry: [
|
|
717
|
+
{
|
|
718
|
+
resource: {
|
|
719
|
+
resourceType: "Patient",
|
|
720
|
+
id: "patient-ra-min",
|
|
721
|
+
},
|
|
722
|
+
},
|
|
723
|
+
{
|
|
724
|
+
resource: {
|
|
725
|
+
resourceType: "RiskAssessment",
|
|
726
|
+
id: "riskassessment-min",
|
|
727
|
+
status: "final",
|
|
728
|
+
subject: { reference: "Patient/patient-ra-min" },
|
|
729
|
+
prediction: [],
|
|
730
|
+
},
|
|
731
|
+
},
|
|
732
|
+
],
|
|
733
|
+
});
|
|
734
|
+
const ra = sdk.getResourceById("riskassessment-min");
|
|
735
|
+
expect(ra?.getBasedOn?.()).toBeUndefined();
|
|
736
|
+
expect(ra?.getParent?.()).toBeUndefined();
|
|
737
|
+
expect(ra?.getCondition?.()).toBeUndefined();
|
|
738
|
+
const reasonRef = ra?.getReasonReferences?.();
|
|
739
|
+
expect(reasonRef === undefined || reasonRef.length === 0).toBe(true);
|
|
740
|
+
const basis = ra?.getBasis?.();
|
|
741
|
+
expect(basis === undefined || basis.length === 0).toBe(true);
|
|
742
|
+
});
|
|
743
|
+
});
|
|
744
|
+
// ---------------------------------------------------------------------------
|
|
745
|
+
// FamilyMemberHistory
|
|
746
|
+
// ---------------------------------------------------------------------------
|
|
747
|
+
const familyMemberHistoryBundle = {
|
|
748
|
+
resourceType: "Bundle",
|
|
749
|
+
type: "collection",
|
|
750
|
+
entry: [
|
|
751
|
+
{
|
|
752
|
+
resource: {
|
|
753
|
+
resourceType: "Patient",
|
|
754
|
+
id: "patient-fmh",
|
|
755
|
+
},
|
|
756
|
+
},
|
|
757
|
+
{
|
|
758
|
+
resource: {
|
|
759
|
+
resourceType: "Condition",
|
|
760
|
+
id: "condition-fmh",
|
|
761
|
+
clinicalStatus: { coding: [{ code: "active" }] },
|
|
762
|
+
subject: { reference: "Patient/patient-fmh" },
|
|
763
|
+
code: { text: "Heart disease" },
|
|
764
|
+
},
|
|
765
|
+
},
|
|
766
|
+
{
|
|
767
|
+
resource: {
|
|
768
|
+
resourceType: "AllergyIntolerance",
|
|
769
|
+
id: "allergy-fmh",
|
|
770
|
+
patient: { reference: "Patient/patient-fmh" },
|
|
771
|
+
clinicalStatus: { coding: [{ code: "active" }] },
|
|
772
|
+
code: { text: "Peanuts" },
|
|
773
|
+
},
|
|
774
|
+
},
|
|
775
|
+
{
|
|
776
|
+
resource: {
|
|
777
|
+
resourceType: "QuestionnaireResponse",
|
|
778
|
+
id: "qr-fmh",
|
|
779
|
+
status: "completed",
|
|
780
|
+
questionnaire: "Questionnaire/family-history-q",
|
|
781
|
+
subject: { reference: "Patient/patient-fmh" },
|
|
782
|
+
},
|
|
783
|
+
},
|
|
784
|
+
{
|
|
785
|
+
resource: {
|
|
786
|
+
resourceType: "FamilyMemberHistory",
|
|
787
|
+
id: "fmh-main",
|
|
788
|
+
status: "completed",
|
|
789
|
+
patient: { reference: "Patient/patient-fmh" },
|
|
790
|
+
relationship: { coding: [{ code: "FTH", display: "Father" }] },
|
|
791
|
+
reasonReference: [
|
|
792
|
+
{ reference: "Condition/condition-fmh" },
|
|
793
|
+
{ reference: "AllergyIntolerance/allergy-fmh" },
|
|
794
|
+
{ reference: "QuestionnaireResponse/qr-fmh" },
|
|
795
|
+
],
|
|
796
|
+
},
|
|
797
|
+
},
|
|
798
|
+
],
|
|
799
|
+
};
|
|
800
|
+
describe("FamilyMemberHistory new reference methods", () => {
|
|
801
|
+
it("getReasonReferences resolves to multiple resource types", async () => {
|
|
802
|
+
const sdk = await index_1.FhirBundleSdk.create(familyMemberHistoryBundle);
|
|
803
|
+
const fmh = sdk.getResourceById("fmh-main");
|
|
804
|
+
const reasons = fmh?.getReasonReferences?.();
|
|
805
|
+
expect(reasons).toHaveLength(3);
|
|
806
|
+
const types = reasons?.map(r => r.resourceType).sort();
|
|
807
|
+
expect(types).toEqual(["AllergyIntolerance", "Condition", "QuestionnaireResponse"]);
|
|
808
|
+
});
|
|
809
|
+
it("getReasonReferences resolves Condition correctly", async () => {
|
|
810
|
+
const sdk = await index_1.FhirBundleSdk.create(familyMemberHistoryBundle);
|
|
811
|
+
const fmh = sdk.getResourceById("fmh-main");
|
|
812
|
+
const reasons = fmh?.getReasonReferences?.();
|
|
813
|
+
const condition = reasons?.find(r => r.resourceType === "Condition");
|
|
814
|
+
expect(condition?.id).toBe("condition-fmh");
|
|
815
|
+
});
|
|
816
|
+
it("getReasonReferences returns empty array when not set", async () => {
|
|
817
|
+
const sdk = await index_1.FhirBundleSdk.create({
|
|
818
|
+
resourceType: "Bundle",
|
|
819
|
+
type: "collection",
|
|
820
|
+
entry: [
|
|
821
|
+
{
|
|
822
|
+
resource: {
|
|
823
|
+
resourceType: "Patient",
|
|
824
|
+
id: "patient-fmh-min",
|
|
825
|
+
},
|
|
826
|
+
},
|
|
827
|
+
{
|
|
828
|
+
resource: {
|
|
829
|
+
resourceType: "FamilyMemberHistory",
|
|
830
|
+
id: "fmh-min",
|
|
831
|
+
status: "completed",
|
|
832
|
+
patient: { reference: "Patient/patient-fmh-min" },
|
|
833
|
+
relationship: { coding: [{ code: "FTH" }] },
|
|
834
|
+
},
|
|
835
|
+
},
|
|
836
|
+
],
|
|
837
|
+
});
|
|
838
|
+
const fmh = sdk.getResourceById("fmh-min");
|
|
839
|
+
const reasons = fmh?.getReasonReferences?.();
|
|
840
|
+
expect(reasons === undefined || reasons.length === 0).toBe(true);
|
|
841
|
+
});
|
|
842
|
+
});
|
|
843
|
+
// ---------------------------------------------------------------------------
|
|
844
|
+
// Coverage
|
|
845
|
+
// ---------------------------------------------------------------------------
|
|
846
|
+
const coverageBundle = {
|
|
847
|
+
resourceType: "Bundle",
|
|
848
|
+
type: "collection",
|
|
849
|
+
entry: [
|
|
850
|
+
{
|
|
851
|
+
resource: {
|
|
852
|
+
resourceType: "Patient",
|
|
853
|
+
id: "patient-cov",
|
|
854
|
+
},
|
|
855
|
+
},
|
|
856
|
+
{
|
|
857
|
+
resource: {
|
|
858
|
+
resourceType: "Contract",
|
|
859
|
+
id: "contract-cov",
|
|
860
|
+
status: "executed",
|
|
861
|
+
},
|
|
862
|
+
},
|
|
863
|
+
{
|
|
864
|
+
resource: {
|
|
865
|
+
resourceType: "Coverage",
|
|
866
|
+
id: "coverage-main",
|
|
867
|
+
status: "active",
|
|
868
|
+
beneficiary: { reference: "Patient/patient-cov" },
|
|
869
|
+
payor: [{ reference: "Patient/patient-cov" }],
|
|
870
|
+
contract: [{ reference: "Contract/contract-cov" }],
|
|
871
|
+
},
|
|
872
|
+
},
|
|
873
|
+
],
|
|
874
|
+
};
|
|
875
|
+
describe("Coverage new reference methods", () => {
|
|
876
|
+
it("getContracts resolves to Contract", async () => {
|
|
877
|
+
const sdk = await index_1.FhirBundleSdk.create(coverageBundle);
|
|
878
|
+
const cov = sdk.getResourceById("coverage-main");
|
|
879
|
+
const contracts = cov?.getContracts?.();
|
|
880
|
+
expect(contracts).toHaveLength(1);
|
|
881
|
+
expect(contracts?.[0]?.resourceType).toBe("Contract");
|
|
882
|
+
expect(contracts?.[0]?.id).toBe("contract-cov");
|
|
883
|
+
});
|
|
884
|
+
it("getContracts returns empty array when not set", async () => {
|
|
885
|
+
const sdk = await index_1.FhirBundleSdk.create({
|
|
886
|
+
resourceType: "Bundle",
|
|
887
|
+
type: "collection",
|
|
888
|
+
entry: [
|
|
889
|
+
{
|
|
890
|
+
resource: {
|
|
891
|
+
resourceType: "Patient",
|
|
892
|
+
id: "patient-cov-min",
|
|
893
|
+
},
|
|
894
|
+
},
|
|
895
|
+
{
|
|
896
|
+
resource: {
|
|
897
|
+
resourceType: "Coverage",
|
|
898
|
+
id: "coverage-min",
|
|
899
|
+
status: "active",
|
|
900
|
+
beneficiary: { reference: "Patient/patient-cov-min" },
|
|
901
|
+
payor: [{ reference: "Patient/patient-cov-min" }],
|
|
902
|
+
},
|
|
903
|
+
},
|
|
904
|
+
],
|
|
905
|
+
});
|
|
906
|
+
const cov = sdk.getResourceById("coverage-min");
|
|
907
|
+
const contracts = cov?.getContracts?.();
|
|
908
|
+
expect(contracts === undefined || contracts.length === 0).toBe(true);
|
|
909
|
+
});
|
|
910
|
+
});
|
|
911
|
+
//# sourceMappingURL=audit-reference-methods.test.js.map
|