@metriport/fhir-sdk 1.3.7 → 1.4.1
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/README.md +173 -8
- package/dist/__tests__/careplan.test.d.ts +2 -0
- package/dist/__tests__/careplan.test.d.ts.map +1 -0
- package/dist/__tests__/careplan.test.js +544 -0
- package/dist/__tests__/careplan.test.js.map +1 -0
- package/dist/__tests__/coding-utilities.test.d.ts +2 -0
- package/dist/__tests__/coding-utilities.test.d.ts.map +1 -0
- package/dist/__tests__/coding-utilities.test.js +482 -0
- package/dist/__tests__/coding-utilities.test.js.map +1 -0
- package/dist/__tests__/type-guards.test.d.ts +2 -0
- package/dist/__tests__/type-guards.test.d.ts.map +1 -0
- package/dist/__tests__/type-guards.test.js +163 -0
- package/dist/__tests__/type-guards.test.js.map +1 -0
- package/dist/demo-reverse-references.d.ts +7 -0
- package/dist/demo-reverse-references.d.ts.map +1 -0
- package/dist/demo-reverse-references.js +207 -0
- package/dist/demo-reverse-references.js.map +1 -0
- package/dist/fhir-bundle-sdk.d.ts +50 -47
- package/dist/fhir-bundle-sdk.d.ts.map +1 -1
- package/dist/fhir-bundle-sdk.js +10 -2
- package/dist/fhir-bundle-sdk.js.map +1 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -1
- package/dist/internal/coding-systems.d.ts +42 -0
- package/dist/internal/coding-systems.d.ts.map +1 -0
- package/dist/internal/coding-systems.js +47 -0
- package/dist/internal/coding-systems.js.map +1 -0
- package/dist/internal/coding-utilities.d.ts +27 -0
- package/dist/internal/coding-utilities.d.ts.map +1 -0
- package/dist/internal/coding-utilities.js +297 -0
- package/dist/internal/coding-utilities.js.map +1 -0
- package/dist/internal/graph-traversal.js +1 -1
- package/dist/internal/graph-traversal.js.map +1 -1
- package/dist/internal/llm-context.d.ts.map +1 -1
- package/dist/internal/llm-context.js +3 -1
- package/dist/internal/llm-context.js.map +1 -1
- package/dist/internal/reference-resolution.d.ts.map +1 -1
- package/dist/internal/reference-resolution.js +99 -11
- package/dist/internal/reference-resolution.js.map +1 -1
- package/dist/internal/transparent-proxy.d.ts +12 -0
- package/dist/internal/transparent-proxy.d.ts.map +1 -0
- package/dist/internal/transparent-proxy.js +81 -0
- package/dist/internal/transparent-proxy.js.map +1 -0
- package/dist/type-guards.d.ts +183 -0
- package/dist/type-guards.d.ts.map +1 -0
- package/dist/type-guards.js +108 -0
- package/dist/type-guards.js.map +1 -0
- package/dist/types/coding-fields.d.ts +292 -0
- package/dist/types/coding-fields.d.ts.map +1 -0
- package/dist/types/coding-fields.js +3 -0
- package/dist/types/coding-fields.js.map +1 -0
- package/dist/types/smart-resources.d.ts +152 -6
- package/dist/types/smart-resources.d.ts.map +1 -1
- package/dist/types/smart-resources.js +35 -3
- package/dist/types/smart-resources.js.map +1 -1
- package/package.json +2 -3
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const fhir_bundle_sdk_1 = require("../fhir-bundle-sdk");
|
|
4
|
+
const type_guards_1 = require("../type-guards");
|
|
5
|
+
describe("Type Guards", () => {
|
|
6
|
+
describe("Basic type narrowing with mixed resource arrays", () => {
|
|
7
|
+
test("filters mixed Resource array to specific type with proper inference", () => {
|
|
8
|
+
const resources = [
|
|
9
|
+
{ resourceType: "Patient", id: "patient-1" },
|
|
10
|
+
{ resourceType: "Observation", id: "obs-1", status: "final", code: { text: "test" } },
|
|
11
|
+
{ resourceType: "Patient", id: "patient-2" },
|
|
12
|
+
{
|
|
13
|
+
resourceType: "DiagnosticReport",
|
|
14
|
+
id: "report-1",
|
|
15
|
+
status: "final",
|
|
16
|
+
code: { text: "test" },
|
|
17
|
+
},
|
|
18
|
+
{ resourceType: "Observation", id: "obs-2", status: "final", code: { text: "test" } },
|
|
19
|
+
];
|
|
20
|
+
const patients = resources.filter(type_guards_1.isPatient);
|
|
21
|
+
const observations = resources.filter(type_guards_1.isObservation);
|
|
22
|
+
const reports = resources.filter(type_guards_1.isDiagnosticReport);
|
|
23
|
+
// Type assertions validate TypeScript properly inferred the types
|
|
24
|
+
expect(patients).toHaveLength(2);
|
|
25
|
+
expect(observations).toHaveLength(2);
|
|
26
|
+
expect(reports).toHaveLength(1);
|
|
27
|
+
// TypeScript knows these are Patients, so we can access Patient-specific fields
|
|
28
|
+
patients.forEach(patient => {
|
|
29
|
+
expect(patient.resourceType).toBe("Patient");
|
|
30
|
+
// This wouldn't compile if TypeScript didn't narrow the type
|
|
31
|
+
void patient.name; // Patient-specific field accessible due to type narrowing
|
|
32
|
+
});
|
|
33
|
+
// TypeScript knows these are Observations
|
|
34
|
+
observations.forEach(obs => {
|
|
35
|
+
expect(obs.resourceType).toBe("Observation");
|
|
36
|
+
expect(obs.status).toBe("final"); // Observation-specific field accessible
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
describe("Type guards with Smart resources", () => {
|
|
41
|
+
test("filters Smart resources with proper type inference", async () => {
|
|
42
|
+
const bundle = {
|
|
43
|
+
resourceType: "Bundle",
|
|
44
|
+
type: "collection",
|
|
45
|
+
entry: [
|
|
46
|
+
{ resource: { resourceType: "Patient", id: "patient-1" } },
|
|
47
|
+
{
|
|
48
|
+
resource: {
|
|
49
|
+
resourceType: "Observation",
|
|
50
|
+
id: "obs-1",
|
|
51
|
+
status: "final",
|
|
52
|
+
code: { text: "test" },
|
|
53
|
+
subject: { reference: "Patient/patient-1" },
|
|
54
|
+
},
|
|
55
|
+
},
|
|
56
|
+
{ resource: { resourceType: "Patient", id: "patient-2" } },
|
|
57
|
+
{
|
|
58
|
+
resource: {
|
|
59
|
+
resourceType: "Encounter",
|
|
60
|
+
id: "enc-1",
|
|
61
|
+
status: "finished",
|
|
62
|
+
class: { code: "test" },
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
resource: {
|
|
67
|
+
resourceType: "Observation",
|
|
68
|
+
id: "obs-2",
|
|
69
|
+
status: "final",
|
|
70
|
+
code: { text: "test" },
|
|
71
|
+
},
|
|
72
|
+
},
|
|
73
|
+
],
|
|
74
|
+
};
|
|
75
|
+
const sdk = await fhir_bundle_sdk_1.FhirBundleSdk.create(bundle);
|
|
76
|
+
// Test filtering observations directly - this is the main use case
|
|
77
|
+
const allObservations = sdk.getObservations();
|
|
78
|
+
expect(allObservations).toHaveLength(2);
|
|
79
|
+
allObservations.forEach(obs => {
|
|
80
|
+
expect(obs.resourceType).toBe("Observation");
|
|
81
|
+
expect(obs.__isSmartResource).toBe(true);
|
|
82
|
+
// Type guard confirms it's an Observation, so we can access observation-specific fields
|
|
83
|
+
if ((0, type_guards_1.isObservation)(obs)) {
|
|
84
|
+
const subject = obs.getSubject();
|
|
85
|
+
void subject;
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
// Test filtering patients
|
|
89
|
+
const allPatients = sdk.getPatients();
|
|
90
|
+
expect(allPatients).toHaveLength(2);
|
|
91
|
+
allPatients.forEach(patient => {
|
|
92
|
+
expect(patient.resourceType).toBe("Patient");
|
|
93
|
+
expect(patient.__isSmartResource).toBe(true);
|
|
94
|
+
});
|
|
95
|
+
});
|
|
96
|
+
test("type guards work in conditional blocks with Smart resources", async () => {
|
|
97
|
+
const bundle = {
|
|
98
|
+
resourceType: "Bundle",
|
|
99
|
+
type: "collection",
|
|
100
|
+
entry: [
|
|
101
|
+
{
|
|
102
|
+
resource: {
|
|
103
|
+
resourceType: "Patient",
|
|
104
|
+
id: "patient-1",
|
|
105
|
+
name: [{ given: ["Jane"], family: "Doe" }],
|
|
106
|
+
},
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
resource: {
|
|
110
|
+
resourceType: "Observation",
|
|
111
|
+
id: "obs-1",
|
|
112
|
+
status: "final",
|
|
113
|
+
code: { text: "test" },
|
|
114
|
+
valueQuantity: { value: 120, unit: "mmHg" },
|
|
115
|
+
},
|
|
116
|
+
},
|
|
117
|
+
],
|
|
118
|
+
};
|
|
119
|
+
const sdk = await fhir_bundle_sdk_1.FhirBundleSdk.create(bundle);
|
|
120
|
+
const resource1 = sdk.getResourceById("patient-1");
|
|
121
|
+
const resource2 = sdk.getResourceById("obs-1");
|
|
122
|
+
// Type guard in conditional - TypeScript should narrow the type
|
|
123
|
+
if (resource1 && (0, type_guards_1.isPatient)(resource1)) {
|
|
124
|
+
expect(resource1.resourceType).toBe("Patient");
|
|
125
|
+
const name = resource1.name?.[0]?.given?.[0];
|
|
126
|
+
expect(name).toBe("Jane");
|
|
127
|
+
}
|
|
128
|
+
if (resource2 && (0, type_guards_1.isObservation)(resource2)) {
|
|
129
|
+
expect(resource2.resourceType).toBe("Observation");
|
|
130
|
+
const value = resource2.valueQuantity?.value;
|
|
131
|
+
expect(value).toBe(120);
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
});
|
|
135
|
+
describe("Edge cases", () => {
|
|
136
|
+
test("handles undefined gracefully", () => {
|
|
137
|
+
expect((0, type_guards_1.isPatient)(undefined)).toBe(false);
|
|
138
|
+
expect((0, type_guards_1.isObservation)(undefined)).toBe(false);
|
|
139
|
+
expect((0, type_guards_1.isDiagnosticReport)(undefined)).toBe(false);
|
|
140
|
+
});
|
|
141
|
+
test("filters out undefined values from array", () => {
|
|
142
|
+
const resources = [
|
|
143
|
+
{ resourceType: "Patient", id: "1" },
|
|
144
|
+
undefined,
|
|
145
|
+
{ resourceType: "Observation", id: "2", status: "final", code: { text: "test" } },
|
|
146
|
+
undefined,
|
|
147
|
+
];
|
|
148
|
+
const patients = resources.filter(type_guards_1.isPatient);
|
|
149
|
+
const observations = resources.filter(type_guards_1.isObservation);
|
|
150
|
+
expect(patients).toHaveLength(1);
|
|
151
|
+
expect(observations).toHaveLength(1);
|
|
152
|
+
});
|
|
153
|
+
test("returns empty array when no matches found", () => {
|
|
154
|
+
const resources = [
|
|
155
|
+
{ resourceType: "Patient", id: "1" },
|
|
156
|
+
{ resourceType: "Patient", id: "2" },
|
|
157
|
+
];
|
|
158
|
+
const observations = resources.filter(type_guards_1.isObservation);
|
|
159
|
+
expect(observations).toHaveLength(0);
|
|
160
|
+
});
|
|
161
|
+
});
|
|
162
|
+
});
|
|
163
|
+
//# sourceMappingURL=type-guards.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type-guards.test.js","sourceRoot":"","sources":["../../src/__tests__/type-guards.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"demo-reverse-references.d.ts","sourceRoot":"","sources":["../src/demo-reverse-references.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Demo script showcasing reverse reference functionality in FHIR SDK
|
|
4
|
+
*
|
|
5
|
+
* Run with: npx ts-node src/demo-reverse-references.ts
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
const index_1 = require("./index");
|
|
9
|
+
const fhir_bundles_1 = require("./__tests__/fixtures/fhir-bundles");
|
|
10
|
+
async function demonstrateReverseReferences() {
|
|
11
|
+
console.log("=".repeat(80));
|
|
12
|
+
console.log("FHIR SDK - Reverse Reference Lookup Demo");
|
|
13
|
+
console.log("=".repeat(80));
|
|
14
|
+
console.log();
|
|
15
|
+
// Create SDK instance with sample bundle
|
|
16
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
|
|
17
|
+
console.log(`📦 Loaded bundle with ${sdk.total} resources`);
|
|
18
|
+
console.log();
|
|
19
|
+
// ============================================================================
|
|
20
|
+
// DEMO 1: Find all resources that reference a patient
|
|
21
|
+
// ============================================================================
|
|
22
|
+
console.log("─".repeat(80));
|
|
23
|
+
console.log("DEMO 1: Find all resources that reference a specific patient");
|
|
24
|
+
console.log("─".repeat(80));
|
|
25
|
+
const patientId = "patient-123";
|
|
26
|
+
console.log(`\n🔍 Finding all resources that reference Patient/${patientId}...\n`);
|
|
27
|
+
const referencingPatient = sdk.getResourcesReferencingId(patientId);
|
|
28
|
+
console.log(`Found ${referencingPatient.length} resources:\n`);
|
|
29
|
+
for (const resource of referencingPatient) {
|
|
30
|
+
console.log(` ✓ ${resource.resourceType}/${resource.id}`);
|
|
31
|
+
}
|
|
32
|
+
console.log();
|
|
33
|
+
// ============================================================================
|
|
34
|
+
// DEMO 2: Filter by resource type
|
|
35
|
+
// ============================================================================
|
|
36
|
+
console.log("─".repeat(80));
|
|
37
|
+
console.log("DEMO 2: Filter reverse references by resource type");
|
|
38
|
+
console.log("─".repeat(80));
|
|
39
|
+
console.log(`\n🔍 Finding only Observations that reference Patient/${patientId}...\n`);
|
|
40
|
+
const observations = sdk.getResourcesReferencingId(patientId, {
|
|
41
|
+
resourceType: "Observation",
|
|
42
|
+
});
|
|
43
|
+
console.log(`Found ${observations.length} Observation(s):\n`);
|
|
44
|
+
for (const obs of observations) {
|
|
45
|
+
const obsData = obs;
|
|
46
|
+
console.log(` ✓ Observation/${obs.id}`);
|
|
47
|
+
console.log(` Code: ${obsData.code?.text || "N/A"}`);
|
|
48
|
+
console.log(
|
|
49
|
+
` Value: ${obsData.valueQuantity?.value || "N/A"} ${obsData.valueQuantity?.unit || ""}`
|
|
50
|
+
);
|
|
51
|
+
}
|
|
52
|
+
console.log();
|
|
53
|
+
// ============================================================================
|
|
54
|
+
// DEMO 3: Filter by reference field
|
|
55
|
+
// ============================================================================
|
|
56
|
+
console.log("─".repeat(80));
|
|
57
|
+
console.log("DEMO 3: Filter reverse references by field name");
|
|
58
|
+
console.log("─".repeat(80));
|
|
59
|
+
console.log(
|
|
60
|
+
`\n🔍 Finding resources that reference Patient/${patientId} via 'subject' field...\n`
|
|
61
|
+
);
|
|
62
|
+
const subjectReferences = sdk.getResourcesReferencingId(patientId, {
|
|
63
|
+
referenceField: "subject",
|
|
64
|
+
});
|
|
65
|
+
console.log(`Found ${subjectReferences.length} resource(s) with 'subject' reference:\n`);
|
|
66
|
+
for (const resource of subjectReferences) {
|
|
67
|
+
console.log(` ✓ ${resource.resourceType}/${resource.id}`);
|
|
68
|
+
}
|
|
69
|
+
console.log();
|
|
70
|
+
// ============================================================================
|
|
71
|
+
// DEMO 4: Combined filters
|
|
72
|
+
// ============================================================================
|
|
73
|
+
console.log("─".repeat(80));
|
|
74
|
+
console.log("DEMO 4: Combine resource type and field filters");
|
|
75
|
+
console.log("─".repeat(80));
|
|
76
|
+
const practitionerId = "practitioner-456";
|
|
77
|
+
console.log(
|
|
78
|
+
`\n🔍 Finding Observations that reference Practitioner/${practitionerId} via 'performer'...\n`
|
|
79
|
+
);
|
|
80
|
+
const performerObs = sdk.getResourcesReferencingId(practitionerId, {
|
|
81
|
+
resourceType: "Observation",
|
|
82
|
+
referenceField: "performer",
|
|
83
|
+
});
|
|
84
|
+
console.log(`Found ${performerObs.length} Observation(s):\n`);
|
|
85
|
+
for (const obs of performerObs) {
|
|
86
|
+
console.log(` ✓ Observation/${obs.id}`);
|
|
87
|
+
console.log(` Performed by: Practitioner/${practitionerId}`);
|
|
88
|
+
}
|
|
89
|
+
console.log();
|
|
90
|
+
// ============================================================================
|
|
91
|
+
// DEMO 5: Smart resource method
|
|
92
|
+
// ============================================================================
|
|
93
|
+
console.log("─".repeat(80));
|
|
94
|
+
console.log("DEMO 5: Using smart resource getReferencingResources() method");
|
|
95
|
+
console.log("─".repeat(80));
|
|
96
|
+
const patient = sdk.getPatientById(patientId);
|
|
97
|
+
if (patient) {
|
|
98
|
+
console.log(`\n👤 Patient: ${patient.name?.[0]?.family}, ${patient.name?.[0]?.given?.[0]}`);
|
|
99
|
+
console.log(` Gender: ${patient.gender}`);
|
|
100
|
+
console.log(` Birth Date: ${patient.birthDate}\n`);
|
|
101
|
+
// Use the smart resource method
|
|
102
|
+
const referencingResources = patient.getReferencingResources();
|
|
103
|
+
console.log(`📊 This patient is referenced by ${referencingResources.length} resources:\n`);
|
|
104
|
+
// Group by resource type
|
|
105
|
+
const byType = referencingResources.reduce((acc, r) => {
|
|
106
|
+
acc[r.resourceType] = (acc[r.resourceType] || 0) + 1;
|
|
107
|
+
return acc;
|
|
108
|
+
}, {});
|
|
109
|
+
for (const [type, count] of Object.entries(byType)) {
|
|
110
|
+
console.log(` • ${type}: ${count}`);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
console.log();
|
|
114
|
+
// ============================================================================
|
|
115
|
+
// DEMO 6: Discover related encounters
|
|
116
|
+
// ============================================================================
|
|
117
|
+
console.log("─".repeat(80));
|
|
118
|
+
console.log("DEMO 6: Discover what happened during an encounter");
|
|
119
|
+
console.log("─".repeat(80));
|
|
120
|
+
const encounterId = "encounter-789";
|
|
121
|
+
console.log(`\n🏥 Finding all clinical activities during Encounter/${encounterId}...\n`);
|
|
122
|
+
const encounterReferences = sdk.getResourcesReferencingId(encounterId, {
|
|
123
|
+
referenceField: "encounter",
|
|
124
|
+
});
|
|
125
|
+
console.log(`Found ${encounterReferences.length} clinical record(s) from this encounter:\n`);
|
|
126
|
+
for (const resource of encounterReferences) {
|
|
127
|
+
const data = resource;
|
|
128
|
+
console.log(` 📋 ${resource.resourceType}/${resource.id}`);
|
|
129
|
+
if (resource.resourceType === "Observation") {
|
|
130
|
+
console.log(` Type: ${data.code?.text || "N/A"}`);
|
|
131
|
+
console.log(` Status: ${data.status}`);
|
|
132
|
+
} else if (resource.resourceType === "DiagnosticReport") {
|
|
133
|
+
console.log(` Type: ${data.code?.text || "N/A"}`);
|
|
134
|
+
console.log(` Status: ${data.status}`);
|
|
135
|
+
console.log(` Results: ${data.result?.length || 0} observation(s)`);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
console.log();
|
|
139
|
+
// ============================================================================
|
|
140
|
+
// DEMO 7: Performance comparison
|
|
141
|
+
// ============================================================================
|
|
142
|
+
console.log("─".repeat(80));
|
|
143
|
+
console.log("DEMO 7: Performance - O(1) reverse lookup");
|
|
144
|
+
console.log("─".repeat(80));
|
|
145
|
+
console.log("\n⚡ Running 1000 reverse reference lookups...\n");
|
|
146
|
+
const iterations = 1000;
|
|
147
|
+
const startTime = performance.now();
|
|
148
|
+
for (let i = 0; i < iterations; i++) {
|
|
149
|
+
sdk.getResourcesReferencingId(patientId);
|
|
150
|
+
}
|
|
151
|
+
const endTime = performance.now();
|
|
152
|
+
const avgTime = (endTime - startTime) / iterations;
|
|
153
|
+
console.log(` Total time: ${(endTime - startTime).toFixed(2)}ms`);
|
|
154
|
+
console.log(` Average per lookup: ${avgTime.toFixed(4)}ms`);
|
|
155
|
+
console.log(
|
|
156
|
+
` Performance: ${
|
|
157
|
+
avgTime < 0.1
|
|
158
|
+
? "✅ Excellent (< 0.1ms)"
|
|
159
|
+
: avgTime < 1
|
|
160
|
+
? "✅ Good (< 1ms)"
|
|
161
|
+
: "⚠️ Could be better"
|
|
162
|
+
}`
|
|
163
|
+
);
|
|
164
|
+
console.log();
|
|
165
|
+
// ============================================================================
|
|
166
|
+
// DEMO 8: Bi-directional reference navigation
|
|
167
|
+
// ============================================================================
|
|
168
|
+
console.log("─".repeat(80));
|
|
169
|
+
console.log("DEMO 8: Bi-directional reference navigation");
|
|
170
|
+
console.log("─".repeat(80));
|
|
171
|
+
console.log("\n🔄 Demonstrating forward and reverse reference navigation...\n");
|
|
172
|
+
const observation = sdk.getObservationById("observation-001");
|
|
173
|
+
if (observation) {
|
|
174
|
+
console.log(`Starting from: Observation/${observation.id}`);
|
|
175
|
+
console.log();
|
|
176
|
+
// Forward reference: Get the patient
|
|
177
|
+
console.log("➡️ Forward: observation.getSubject()");
|
|
178
|
+
const subject = observation.getSubject();
|
|
179
|
+
if (subject) {
|
|
180
|
+
console.log(` Found: ${subject.resourceType}/${subject.id}`);
|
|
181
|
+
console.log();
|
|
182
|
+
// Reverse reference: Get all resources referencing this patient
|
|
183
|
+
console.log("⬅️ Reverse: patient.getReferencingResources()");
|
|
184
|
+
const backReferences = subject.getReferencingResources();
|
|
185
|
+
console.log(` Found ${backReferences.length} resources referencing this patient:`);
|
|
186
|
+
for (const ref of backReferences) {
|
|
187
|
+
console.log(` • ${ref.resourceType}/${ref.id}`);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
console.log();
|
|
192
|
+
// ============================================================================
|
|
193
|
+
console.log("=".repeat(80));
|
|
194
|
+
console.log("✨ Demo complete! All reverse reference features showcased.");
|
|
195
|
+
console.log("=".repeat(80));
|
|
196
|
+
}
|
|
197
|
+
// Run the demo
|
|
198
|
+
demonstrateReverseReferences()
|
|
199
|
+
.then(() => {
|
|
200
|
+
console.log("\n✅ Demo completed successfully\n");
|
|
201
|
+
process.exit(0);
|
|
202
|
+
})
|
|
203
|
+
.catch(error => {
|
|
204
|
+
console.error("\n❌ Demo failed:", error);
|
|
205
|
+
process.exit(1);
|
|
206
|
+
});
|
|
207
|
+
//# sourceMappingURL=demo-reverse-references.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"demo-reverse-references.js","sourceRoot":"","sources":["../src/demo-reverse-references.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Bundle, BundleEntry, Resource } from "@medplum/fhirtypes";
|
|
2
|
+
import { SmartAllergyIntolerance, SmartCarePlan, SmartComposition, SmartCondition, SmartCoverage, SmartDiagnosticReport, SmartDocumentReference, SmartEncounter, SmartFamilyMemberHistory, SmartImmunization, SmartLocation, SmartMedication, SmartMedicationAdministration, SmartMedicationDispense, SmartMedicationRequest, SmartMedicationStatement, SmartObservation, SmartOrganization, SmartPatient, SmartPractitioner, SmartProcedure, SmartRelatedPerson, SmartRiskAssessment, SmartServiceRequest } from "./types/coding-fields";
|
|
2
3
|
import { Smart } from "./types/smart-resources";
|
|
3
4
|
import { ValidationResult, BundleDiffResult, WalkOptions, LLMContextOptions, WalkResult, ReverseReferenceOptions, DateRangeSearchOptions } from "./types/sdk-types";
|
|
4
5
|
/**
|
|
@@ -98,57 +99,59 @@ export declare class FhirBundleSdk {
|
|
|
98
99
|
* Generic helper method to get a resource by ID with type validation
|
|
99
100
|
*/
|
|
100
101
|
private getResourceByIdAndType;
|
|
101
|
-
getPatientById: (id: string) =>
|
|
102
|
-
getObservationById: (id: string) =>
|
|
103
|
-
getEncounterById: (id: string) =>
|
|
104
|
-
getAllergyIntoleranceById: (id: string) =>
|
|
105
|
-
getConditionById: (id: string) =>
|
|
106
|
-
getOrganizationById: (id: string) =>
|
|
107
|
-
getLocationById: (id: string) =>
|
|
108
|
-
getPractitionerById: (id: string) =>
|
|
109
|
-
getDiagnosticReportById: (id: string) =>
|
|
110
|
-
getCompositionById: (id: string) =>
|
|
111
|
-
getCoverageById: (id: string) =>
|
|
112
|
-
getDocumentReferenceById: (id: string) =>
|
|
113
|
-
getImmunizationById: (id: string) =>
|
|
114
|
-
getMedicationById: (id: string) =>
|
|
115
|
-
getMedicationRequestById: (id: string) =>
|
|
116
|
-
getProcedureById: (id: string) =>
|
|
117
|
-
getFamilyMemberHistoryById: (id: string) =>
|
|
118
|
-
getMedicationAdministrationById: (id: string) =>
|
|
119
|
-
getMedicationDispenseById: (id: string) =>
|
|
120
|
-
getMedicationStatementById: (id: string) =>
|
|
121
|
-
getRelatedPersonById: (id: string) =>
|
|
122
|
-
getRiskAssessmentById: (id: string) =>
|
|
123
|
-
getServiceRequestById: (id: string) =>
|
|
102
|
+
getPatientById: (id: string) => SmartPatient | undefined;
|
|
103
|
+
getObservationById: (id: string) => SmartObservation | undefined;
|
|
104
|
+
getEncounterById: (id: string) => SmartEncounter | undefined;
|
|
105
|
+
getAllergyIntoleranceById: (id: string) => SmartAllergyIntolerance | undefined;
|
|
106
|
+
getConditionById: (id: string) => SmartCondition | undefined;
|
|
107
|
+
getOrganizationById: (id: string) => SmartOrganization | undefined;
|
|
108
|
+
getLocationById: (id: string) => SmartLocation | undefined;
|
|
109
|
+
getPractitionerById: (id: string) => SmartPractitioner | undefined;
|
|
110
|
+
getDiagnosticReportById: (id: string) => SmartDiagnosticReport | undefined;
|
|
111
|
+
getCompositionById: (id: string) => SmartComposition | undefined;
|
|
112
|
+
getCoverageById: (id: string) => SmartCoverage | undefined;
|
|
113
|
+
getDocumentReferenceById: (id: string) => SmartDocumentReference | undefined;
|
|
114
|
+
getImmunizationById: (id: string) => SmartImmunization | undefined;
|
|
115
|
+
getMedicationById: (id: string) => SmartMedication | undefined;
|
|
116
|
+
getMedicationRequestById: (id: string) => SmartMedicationRequest | undefined;
|
|
117
|
+
getProcedureById: (id: string) => SmartProcedure | undefined;
|
|
118
|
+
getFamilyMemberHistoryById: (id: string) => SmartFamilyMemberHistory | undefined;
|
|
119
|
+
getMedicationAdministrationById: (id: string) => SmartMedicationAdministration | undefined;
|
|
120
|
+
getMedicationDispenseById: (id: string) => SmartMedicationDispense | undefined;
|
|
121
|
+
getMedicationStatementById: (id: string) => SmartMedicationStatement | undefined;
|
|
122
|
+
getRelatedPersonById: (id: string) => SmartRelatedPerson | undefined;
|
|
123
|
+
getRiskAssessmentById: (id: string) => SmartRiskAssessment | undefined;
|
|
124
|
+
getServiceRequestById: (id: string) => SmartServiceRequest | undefined;
|
|
125
|
+
getCarePlanById: (id: string) => SmartCarePlan | undefined;
|
|
124
126
|
/**
|
|
125
127
|
* Generic helper method to get all resources of a specific type
|
|
126
128
|
* FR-10.1: Returns references to cached objects, not copies
|
|
127
129
|
*/
|
|
128
130
|
private getResourcesByType;
|
|
129
|
-
getPatients: () =>
|
|
130
|
-
getObservations: () =>
|
|
131
|
-
getEncounters: () =>
|
|
132
|
-
getPractitioners: () =>
|
|
133
|
-
getDiagnosticReports: () =>
|
|
134
|
-
getAllergyIntolerances: () =>
|
|
135
|
-
getConditions: () =>
|
|
136
|
-
getOrganizations: () =>
|
|
137
|
-
getLocations: () =>
|
|
138
|
-
getCompositions: () =>
|
|
139
|
-
getCoverages: () =>
|
|
140
|
-
getDocumentReferences: () =>
|
|
141
|
-
getImmunizations: () =>
|
|
142
|
-
getMedications: () =>
|
|
143
|
-
getMedicationRequests: () =>
|
|
144
|
-
getProcedures: () =>
|
|
145
|
-
getFamilyMemberHistories: () =>
|
|
146
|
-
getMedicationAdministrations: () =>
|
|
147
|
-
getMedicationDispenses: () =>
|
|
148
|
-
getMedicationStatements: () =>
|
|
149
|
-
getRelatedPersons: () =>
|
|
150
|
-
getRiskAssessments: () =>
|
|
151
|
-
getServiceRequests: () =>
|
|
131
|
+
getPatients: () => SmartPatient[];
|
|
132
|
+
getObservations: () => SmartObservation[];
|
|
133
|
+
getEncounters: () => SmartEncounter[];
|
|
134
|
+
getPractitioners: () => SmartPractitioner[];
|
|
135
|
+
getDiagnosticReports: () => SmartDiagnosticReport[];
|
|
136
|
+
getAllergyIntolerances: () => SmartAllergyIntolerance[];
|
|
137
|
+
getConditions: () => SmartCondition[];
|
|
138
|
+
getOrganizations: () => SmartOrganization[];
|
|
139
|
+
getLocations: () => SmartLocation[];
|
|
140
|
+
getCompositions: () => SmartComposition[];
|
|
141
|
+
getCoverages: () => SmartCoverage[];
|
|
142
|
+
getDocumentReferences: () => SmartDocumentReference[];
|
|
143
|
+
getImmunizations: () => SmartImmunization[];
|
|
144
|
+
getMedications: () => SmartMedication[];
|
|
145
|
+
getMedicationRequests: () => SmartMedicationRequest[];
|
|
146
|
+
getProcedures: () => SmartProcedure[];
|
|
147
|
+
getFamilyMemberHistories: () => SmartFamilyMemberHistory[];
|
|
148
|
+
getMedicationAdministrations: () => SmartMedicationAdministration[];
|
|
149
|
+
getMedicationDispenses: () => SmartMedicationDispense[];
|
|
150
|
+
getMedicationStatements: () => SmartMedicationStatement[];
|
|
151
|
+
getRelatedPersons: () => SmartRelatedPerson[];
|
|
152
|
+
getRiskAssessments: () => SmartRiskAssessment[];
|
|
153
|
+
getServiceRequests: () => SmartServiceRequest[];
|
|
154
|
+
getCarePlans: () => SmartCarePlan[];
|
|
152
155
|
/**
|
|
153
156
|
* FR-6.1: Export subset of resources by their IDs
|
|
154
157
|
* FR-6.4: Exported bundles maintain original bundle metadata but update total count
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fhir-bundle-sdk.d.ts","sourceRoot":"","sources":["../src/fhir-bundle-sdk.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"fhir-bundle-sdk.d.ts","sourceRoot":"","sources":["../src/fhir-bundle-sdk.ts"],"names":[],"mappings":"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"}
|
package/dist/fhir-bundle-sdk.js
CHANGED
|
@@ -152,9 +152,11 @@ class FhirBundleSdk {
|
|
|
152
152
|
for (const resourceId of resourceIds) {
|
|
153
153
|
const resource = this.getResourceById(resourceId);
|
|
154
154
|
if (resource) {
|
|
155
|
-
|
|
155
|
+
// Cast to Resource to satisfy type checker - Smart extends Resource
|
|
156
|
+
const plainResource = resource;
|
|
157
|
+
const originalEntry = (0, bundle_operations_1.findOriginalEntry)(this.bundle, plainResource);
|
|
156
158
|
if (originalEntry) {
|
|
157
|
-
exportEntries.push((0, bundle_operations_1.createBundleEntry)(originalEntry,
|
|
159
|
+
exportEntries.push((0, bundle_operations_1.createBundleEntry)(originalEntry, plainResource));
|
|
158
160
|
}
|
|
159
161
|
}
|
|
160
162
|
// FR-6.5: Silently skip resources that don't exist
|
|
@@ -172,6 +174,7 @@ class FhirBundleSdk {
|
|
|
172
174
|
for (const resource of resources) {
|
|
173
175
|
const originalEntry = (0, bundle_operations_1.findOriginalEntry)(this.bundle, resource);
|
|
174
176
|
if (originalEntry) {
|
|
177
|
+
// Resource is already a plain Resource from our internal maps
|
|
175
178
|
exportEntries.push((0, bundle_operations_1.createBundleEntry)(originalEntry, resource));
|
|
176
179
|
}
|
|
177
180
|
}
|
|
@@ -511,6 +514,11 @@ FhirBundleSdk.RESOURCE_METHODS = [
|
|
|
511
514
|
singleGetterMethodName: "getServiceRequestById",
|
|
512
515
|
collectionGetterMethodName: "getServiceRequests",
|
|
513
516
|
},
|
|
517
|
+
{
|
|
518
|
+
resourceType: "CarePlan",
|
|
519
|
+
singleGetterMethodName: "getCarePlanById",
|
|
520
|
+
collectionGetterMethodName: "getCarePlans",
|
|
521
|
+
},
|
|
514
522
|
];
|
|
515
523
|
// Static initialization block to generate methods
|
|
516
524
|
(() => {
|