@metriport/fhir-sdk 1.2.7 → 1.3.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 +207 -0
- package/dist/__tests__/clinical-dates.test.d.ts +2 -0
- package/dist/__tests__/clinical-dates.test.d.ts.map +1 -0
- package/dist/__tests__/clinical-dates.test.js +341 -0
- package/dist/__tests__/clinical-dates.test.js.map +1 -0
- package/dist/__tests__/date-range-performance.test.d.ts +2 -0
- package/dist/__tests__/date-range-performance.test.d.ts.map +1 -0
- package/dist/__tests__/date-range-performance.test.js +218 -0
- package/dist/__tests__/date-range-performance.test.js.map +1 -0
- package/dist/__tests__/date-range-search.test.d.ts +2 -0
- package/dist/__tests__/date-range-search.test.d.ts.map +1 -0
- package/dist/__tests__/date-range-search.test.js +215 -0
- package/dist/__tests__/date-range-search.test.js.map +1 -0
- package/dist/__tests__/fhir-bundle-sdk.test.js +467 -0
- package/dist/__tests__/fhir-bundle-sdk.test.js.map +1 -1
- package/dist/__tests__/reverse-references.test.d.ts +2 -0
- package/dist/__tests__/reverse-references.test.d.ts.map +1 -0
- package/dist/__tests__/reverse-references.test.js +241 -0
- package/dist/__tests__/reverse-references.test.js.map +1 -0
- package/dist/clinical-dates.d.ts +26 -0
- package/dist/clinical-dates.d.ts.map +1 -0
- package/dist/clinical-dates.js +571 -0
- package/dist/clinical-dates.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 +222 -0
- package/dist/fhir-bundle-sdk.d.ts.map +1 -0
- package/dist/fhir-bundle-sdk.js +527 -0
- package/dist/fhir-bundle-sdk.js.map +1 -0
- package/dist/index.d.ts +3 -242
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -678
- package/dist/index.js.map +1 -1
- package/dist/internal/bundle-operations.d.ts +14 -0
- package/dist/internal/bundle-operations.d.ts.map +1 -0
- package/dist/internal/bundle-operations.js +55 -0
- package/dist/internal/bundle-operations.js.map +1 -0
- package/dist/internal/date-extraction.d.ts +12 -0
- package/dist/internal/date-extraction.d.ts.map +1 -0
- package/dist/internal/date-extraction.js +629 -0
- package/dist/internal/date-extraction.js.map +1 -0
- package/dist/internal/graph-traversal.d.ts +13 -0
- package/dist/internal/graph-traversal.d.ts.map +1 -0
- package/dist/internal/graph-traversal.js +89 -0
- package/dist/internal/graph-traversal.js.map +1 -0
- package/dist/internal/indexing.d.ts +17 -0
- package/dist/internal/indexing.d.ts.map +1 -0
- package/dist/internal/indexing.js +118 -0
- package/dist/internal/indexing.js.map +1 -0
- package/dist/internal/llm-context.d.ts +39 -0
- package/dist/internal/llm-context.d.ts.map +1 -0
- package/dist/internal/llm-context.js +188 -0
- package/dist/internal/llm-context.js.map +1 -0
- package/dist/internal/reference-resolution.d.ts +25 -0
- package/dist/internal/reference-resolution.d.ts.map +1 -0
- package/dist/internal/reference-resolution.js +133 -0
- package/dist/internal/reference-resolution.js.map +1 -0
- package/dist/internal/reference-utils.d.ts +26 -0
- package/dist/internal/reference-utils.d.ts.map +1 -0
- package/dist/internal/reference-utils.js +89 -0
- package/dist/internal/reference-utils.js.map +1 -0
- package/dist/internal/validation.d.ts +16 -0
- package/dist/internal/validation.d.ts.map +1 -0
- package/dist/internal/validation.js +45 -0
- package/dist/internal/validation.js.map +1 -0
- package/dist/types/sdk-types.d.ts +107 -0
- package/dist/types/sdk-types.d.ts.map +1 -0
- package/dist/types/sdk-types.js +17 -0
- package/dist/types/sdk-types.js.map +1 -0
- package/dist/types/smart-resources.d.ts +97 -4
- package/dist/types/smart-resources.d.ts.map +1 -1
- package/dist/types/smart-resources.js +82 -5
- package/dist/types/smart-resources.js.map +1 -1
- package/dist/utils/interval-tree/index.d.ts +87 -0
- package/dist/utils/interval-tree/index.d.ts.map +1 -0
- package/dist/utils/interval-tree/index.js +774 -0
- package/dist/utils/interval-tree/index.js.map +1 -0
- package/dist/utils/interval-tree/shallowequal/arrays.d.ts +3 -0
- package/dist/utils/interval-tree/shallowequal/arrays.d.ts.map +1 -0
- package/dist/utils/interval-tree/shallowequal/arrays.js +25 -0
- package/dist/utils/interval-tree/shallowequal/arrays.js.map +1 -0
- package/dist/utils/interval-tree/shallowequal/index.d.ts +6 -0
- package/dist/utils/interval-tree/shallowequal/index.d.ts.map +1 -0
- package/dist/utils/interval-tree/shallowequal/index.js +28 -0
- package/dist/utils/interval-tree/shallowequal/index.js.map +1 -0
- package/dist/utils/interval-tree/shallowequal/objects.d.ts +3 -0
- package/dist/utils/interval-tree/shallowequal/objects.d.ts.map +1 -0
- package/dist/utils/interval-tree/shallowequal/objects.js +28 -0
- package/dist/utils/interval-tree/shallowequal/objects.js.map +1 -0
- package/package.json +1 -1
|
@@ -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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"}
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
import { AllergyIntolerance, Bundle, BundleEntry, Composition, Condition, Coverage, DiagnosticReport, DocumentReference, Encounter, FamilyMemberHistory, Immunization, Location, Medication, MedicationAdministration, MedicationDispense, MedicationRequest, MedicationStatement, Observation, Organization, Patient, Practitioner, Procedure, RelatedPerson, Resource, RiskAssessment, ServiceRequest } from "@medplum/fhirtypes";
|
|
2
|
+
import { Smart } from "./types/smart-resources";
|
|
3
|
+
import { ValidationResult, BundleDiffResult, WalkOptions, LLMContextOptions, WalkResult, ReverseReferenceOptions, DateRangeSearchOptions } from "./types/sdk-types";
|
|
4
|
+
/**
|
|
5
|
+
* FHIR Bundle SDK for parsing, querying, and manipulating FHIR bundles with reference resolution
|
|
6
|
+
*/
|
|
7
|
+
export declare class FhirBundleSdk {
|
|
8
|
+
private bundle;
|
|
9
|
+
private resourcesById;
|
|
10
|
+
private resourcesByFullUrl;
|
|
11
|
+
private resourcesByType;
|
|
12
|
+
private reverseReferencesById;
|
|
13
|
+
private dateRangeIndex;
|
|
14
|
+
private smartResourceCache;
|
|
15
|
+
private smartResourceArrayCache;
|
|
16
|
+
private resolutionStack;
|
|
17
|
+
/**
|
|
18
|
+
* Configuration for dynamically generated resource getter methods.
|
|
19
|
+
*
|
|
20
|
+
* Each entry in this array automatically generates both single and collection getter methods.
|
|
21
|
+
*
|
|
22
|
+
* **Example:**
|
|
23
|
+
* ```typescript
|
|
24
|
+
* {
|
|
25
|
+
* resourceType: 'Patient',
|
|
26
|
+
* singleGetterMethodName: 'getPatientById',
|
|
27
|
+
* collectionGetterMethodName: 'getPatients'
|
|
28
|
+
* }
|
|
29
|
+
* ```
|
|
30
|
+
*
|
|
31
|
+
* **Generates the equivalent of:**
|
|
32
|
+
* ```typescript
|
|
33
|
+
* // Single resource getter
|
|
34
|
+
* getPatientById(id: string): Smart<Patient> | undefined {
|
|
35
|
+
* return this.getResourceByIdAndType<Patient>(id, 'Patient');
|
|
36
|
+
* }
|
|
37
|
+
*
|
|
38
|
+
* // Collection getter
|
|
39
|
+
* getPatients(): Smart<Patient>[] {
|
|
40
|
+
* return this.getResourcesByType<Patient>('Patient');
|
|
41
|
+
* }
|
|
42
|
+
* ```
|
|
43
|
+
*
|
|
44
|
+
* **Usage:**
|
|
45
|
+
* ```typescript
|
|
46
|
+
* const sdk = await FhirBundleSdk.create(bundle);
|
|
47
|
+
* const patient = sdk.getPatientById('patient-123'); // Smart<Patient> | undefined
|
|
48
|
+
* const allPatients = sdk.getPatients(); // Smart<Patient>[]
|
|
49
|
+
* ```
|
|
50
|
+
*
|
|
51
|
+
* To add a new resource type, simply add a new entry to this array and declare
|
|
52
|
+
* the corresponding method signatures in the class body.
|
|
53
|
+
*/
|
|
54
|
+
private static readonly RESOURCE_METHODS;
|
|
55
|
+
private constructor();
|
|
56
|
+
get total(): number;
|
|
57
|
+
get entry(): BundleEntry[];
|
|
58
|
+
toObject(): Bundle;
|
|
59
|
+
/**
|
|
60
|
+
* Strip non-clinical metadata from a FHIR resource to reduce noise for LLM consumption.
|
|
61
|
+
* Removes: meta, extension, modifierExtension, text
|
|
62
|
+
* Returns an immutable copy without mutating the original.
|
|
63
|
+
*/
|
|
64
|
+
static stripNonClinicalData<T extends Resource>(resource: T): T;
|
|
65
|
+
/**
|
|
66
|
+
* Create a new FhirBundleSdk instance (async for backwards compatibility)
|
|
67
|
+
* FR-1.2: Validate bundle resourceType
|
|
68
|
+
*/
|
|
69
|
+
static create(bundle: Bundle): Promise<FhirBundleSdk>;
|
|
70
|
+
/**
|
|
71
|
+
* Create a new FhirBundleSdk instance synchronously
|
|
72
|
+
* FR-1.2: Validate bundle resourceType
|
|
73
|
+
*/
|
|
74
|
+
static createSync(bundle: Bundle): FhirBundleSdk;
|
|
75
|
+
/**
|
|
76
|
+
* Create a smart resource with reference resolution methods
|
|
77
|
+
* FR-5.1: Resources returned by SDK have additional getter methods for each Reference field
|
|
78
|
+
* FR-5.7: Reference resolution operates in O(1) time complexity per reference
|
|
79
|
+
* FR-5.8: Original reference fields remain unchanged
|
|
80
|
+
*/
|
|
81
|
+
private createSmartResource;
|
|
82
|
+
/**
|
|
83
|
+
* FR-2.1: Validate all references in the bundle
|
|
84
|
+
* FR-2.2: Identifies references by Resource/id pattern and fullUrl references
|
|
85
|
+
* FR-2.3: Handles both relative and absolute references
|
|
86
|
+
* FR-2.4: Returns validation result with broken reference details
|
|
87
|
+
*/
|
|
88
|
+
lookForBrokenReferences(): ValidationResult;
|
|
89
|
+
/**
|
|
90
|
+
* FR-3.1: Get resource by ID with type parameter support
|
|
91
|
+
* FR-3.2: Method searches both resource.id and entry.fullUrl for matches
|
|
92
|
+
* FR-3.4: Method returns undefined if resource not found
|
|
93
|
+
* FR-3.5: Lookup operates in O(1) time complexity
|
|
94
|
+
* FR-5.1: Returns smart resource with reference resolution methods
|
|
95
|
+
*/
|
|
96
|
+
getResourceById<T extends Resource>(id: string): Smart<T> | undefined;
|
|
97
|
+
/**
|
|
98
|
+
* Generic helper method to get a resource by ID with type validation
|
|
99
|
+
*/
|
|
100
|
+
private getResourceByIdAndType;
|
|
101
|
+
getPatientById: (id: string) => Smart<Patient> | undefined;
|
|
102
|
+
getObservationById: (id: string) => Smart<Observation> | undefined;
|
|
103
|
+
getEncounterById: (id: string) => Smart<Encounter> | undefined;
|
|
104
|
+
getAllergyIntoleranceById: (id: string) => Smart<AllergyIntolerance> | undefined;
|
|
105
|
+
getConditionById: (id: string) => Smart<Condition> | undefined;
|
|
106
|
+
getOrganizationById: (id: string) => Smart<Organization> | undefined;
|
|
107
|
+
getLocationById: (id: string) => Smart<Location> | undefined;
|
|
108
|
+
getPractitionerById: (id: string) => Smart<Practitioner> | undefined;
|
|
109
|
+
getDiagnosticReportById: (id: string) => Smart<DiagnosticReport> | undefined;
|
|
110
|
+
getCompositionById: (id: string) => Smart<Composition> | undefined;
|
|
111
|
+
getCoverageById: (id: string) => Smart<Coverage> | undefined;
|
|
112
|
+
getDocumentReferenceById: (id: string) => Smart<DocumentReference> | undefined;
|
|
113
|
+
getImmunizationById: (id: string) => Smart<Immunization> | undefined;
|
|
114
|
+
getMedicationById: (id: string) => Smart<Medication> | undefined;
|
|
115
|
+
getMedicationRequestById: (id: string) => Smart<MedicationRequest> | undefined;
|
|
116
|
+
getProcedureById: (id: string) => Smart<Procedure> | undefined;
|
|
117
|
+
getFamilyMemberHistoryById: (id: string) => Smart<FamilyMemberHistory> | undefined;
|
|
118
|
+
getMedicationAdministrationById: (id: string) => Smart<MedicationAdministration> | undefined;
|
|
119
|
+
getMedicationDispenseById: (id: string) => Smart<MedicationDispense> | undefined;
|
|
120
|
+
getMedicationStatementById: (id: string) => Smart<MedicationStatement> | undefined;
|
|
121
|
+
getRelatedPersonById: (id: string) => Smart<RelatedPerson> | undefined;
|
|
122
|
+
getRiskAssessmentById: (id: string) => Smart<RiskAssessment> | undefined;
|
|
123
|
+
getServiceRequestById: (id: string) => Smart<ServiceRequest> | undefined;
|
|
124
|
+
/**
|
|
125
|
+
* Generic helper method to get all resources of a specific type
|
|
126
|
+
* FR-10.1: Returns references to cached objects, not copies
|
|
127
|
+
*/
|
|
128
|
+
private getResourcesByType;
|
|
129
|
+
getPatients: () => Smart<Patient>[];
|
|
130
|
+
getObservations: () => Smart<Observation>[];
|
|
131
|
+
getEncounters: () => Smart<Encounter>[];
|
|
132
|
+
getPractitioners: () => Smart<Practitioner>[];
|
|
133
|
+
getDiagnosticReports: () => Smart<DiagnosticReport>[];
|
|
134
|
+
getAllergyIntolerances: () => Smart<AllergyIntolerance>[];
|
|
135
|
+
getConditions: () => Smart<Condition>[];
|
|
136
|
+
getOrganizations: () => Smart<Organization>[];
|
|
137
|
+
getLocations: () => Smart<Location>[];
|
|
138
|
+
getCompositions: () => Smart<Composition>[];
|
|
139
|
+
getCoverages: () => Smart<Coverage>[];
|
|
140
|
+
getDocumentReferences: () => Smart<DocumentReference>[];
|
|
141
|
+
getImmunizations: () => Smart<Immunization>[];
|
|
142
|
+
getMedications: () => Smart<Medication>[];
|
|
143
|
+
getMedicationRequests: () => Smart<MedicationRequest>[];
|
|
144
|
+
getProcedures: () => Smart<Procedure>[];
|
|
145
|
+
getFamilyMemberHistories: () => Smart<FamilyMemberHistory>[];
|
|
146
|
+
getMedicationAdministrations: () => Smart<MedicationAdministration>[];
|
|
147
|
+
getMedicationDispenses: () => Smart<MedicationDispense>[];
|
|
148
|
+
getMedicationStatements: () => Smart<MedicationStatement>[];
|
|
149
|
+
getRelatedPersons: () => Smart<RelatedPerson>[];
|
|
150
|
+
getRiskAssessments: () => Smart<RiskAssessment>[];
|
|
151
|
+
getServiceRequests: () => Smart<ServiceRequest>[];
|
|
152
|
+
/**
|
|
153
|
+
* FR-6.1: Export subset of resources by their IDs
|
|
154
|
+
* FR-6.4: Exported bundles maintain original bundle metadata but update total count
|
|
155
|
+
* FR-6.5: Exported bundles include only resources that exist in the original bundle
|
|
156
|
+
* FR-6.6: Exported bundles preserve original entry.fullUrl values
|
|
157
|
+
*/
|
|
158
|
+
exportSubset(resourceIds: string[]): Bundle;
|
|
159
|
+
/**
|
|
160
|
+
* FR-6.2: Export all resources of a specific type
|
|
161
|
+
* FR-6.4: Exported bundles maintain original bundle metadata but update total count
|
|
162
|
+
* FR-6.6: Exported bundles preserve original entry.fullUrl values
|
|
163
|
+
*/
|
|
164
|
+
exportByType(resourceType: string): Bundle;
|
|
165
|
+
/**
|
|
166
|
+
* FR-6.3: Export all resources of specified types
|
|
167
|
+
* FR-6.4: Exported bundles maintain original bundle metadata but update total count
|
|
168
|
+
* FR-6.6: Exported bundles preserve original entry.fullUrl values
|
|
169
|
+
*/
|
|
170
|
+
exportByTypes(resourceTypes: string[]): Bundle;
|
|
171
|
+
/**
|
|
172
|
+
* Concatenate entries from another FhirBundleSdk with this bundle
|
|
173
|
+
* Returns a new bundle with combined entries while preserving original metadata
|
|
174
|
+
*/
|
|
175
|
+
concatEntries(otherSdk: FhirBundleSdk): Promise<FhirBundleSdk>;
|
|
176
|
+
/**
|
|
177
|
+
* Diff this bundle with another FHIR Bundle by comparing resource ids.
|
|
178
|
+
* Returns three FhirBundleSdk instances: common, baseOnly, parameterOnly.
|
|
179
|
+
*/
|
|
180
|
+
diff(other: Bundle): Promise<BundleDiffResult>;
|
|
181
|
+
/**
|
|
182
|
+
* Diff this bundle with another FhirBundleSdk by comparing resource ids.
|
|
183
|
+
* Returns three FhirBundleSdk instances: common, baseOnly, parameterOnly.
|
|
184
|
+
*/
|
|
185
|
+
diff(other: FhirBundleSdk): Promise<BundleDiffResult>;
|
|
186
|
+
/**
|
|
187
|
+
* Walk references from a starting resource using BFS traversal.
|
|
188
|
+
* Discovers all reachable resources up to maxDepth levels.
|
|
189
|
+
*
|
|
190
|
+
* @param startResource - The smart resource to start traversal from
|
|
191
|
+
* @param options - Walk options including maxDepth and includeStartResource
|
|
192
|
+
* @returns WalkResult containing all discovered resources organized by depth
|
|
193
|
+
*/
|
|
194
|
+
walkReferences<T extends Resource>(startResource: Smart<T>, options?: WalkOptions): WalkResult<T>;
|
|
195
|
+
/**
|
|
196
|
+
* Generate LLM-friendly context from a starting resource and its related resources.
|
|
197
|
+
* Uses BFS to discover related resources, strips non-clinical data, and formats output.
|
|
198
|
+
*
|
|
199
|
+
* @param startResource - The smart resource to start traversal from
|
|
200
|
+
* @param options - Options for depth, inclusion, and format
|
|
201
|
+
* @returns Formatted string suitable for LLM context
|
|
202
|
+
*/
|
|
203
|
+
generateLLMContext<T extends Resource>(startResource: Smart<T>, options?: LLMContextOptions): string;
|
|
204
|
+
/**
|
|
205
|
+
* Get all resources that reference a given resource ID (reverse reference lookup).
|
|
206
|
+
* Operates in O(1) time complexity.
|
|
207
|
+
*
|
|
208
|
+
* @param targetId - The ID of the resource to find references to
|
|
209
|
+
* @param options - Optional filters for resourceType and referenceField
|
|
210
|
+
* @returns Array of smart resources that reference the target resource
|
|
211
|
+
*/
|
|
212
|
+
getResourcesReferencingId<T extends Resource = Resource>(targetId: string, options?: ReverseReferenceOptions): Smart<T>[];
|
|
213
|
+
/**
|
|
214
|
+
* Search for resources by date range using interval tree.
|
|
215
|
+
* Operates in O(log n + k) time complexity, where k is the number of matching intervals.
|
|
216
|
+
*
|
|
217
|
+
* @param options - Search options including date range and optional filters
|
|
218
|
+
* @returns Array of smart resources that match the date range criteria
|
|
219
|
+
*/
|
|
220
|
+
searchByDateRange<T extends Resource = Resource>(options: DateRangeSearchOptions): Smart<T>[];
|
|
221
|
+
}
|
|
222
|
+
//# sourceMappingURL=fhir-bundle-sdk.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fhir-bundle-sdk.d.ts","sourceRoot":"","sources":["../src/fhir-bundle-sdk.ts"],"names":[],"mappings":"AACA,OAAO,EACL,kBAAkB,EAClB,MAAM,EACN,WAAW,EACX,WAAW,EACX,SAAS,EACT,QAAQ,EACR,gBAAgB,EAChB,iBAAiB,EACjB,SAAS,EACT,mBAAmB,EACnB,YAAY,EACZ,QAAQ,EACR,UAAU,EACV,wBAAwB,EACxB,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,EACnB,WAAW,EACX,YAAY,EACZ,OAAO,EACP,YAAY,EACZ,SAAS,EACT,aAAa,EACb,QAAQ,EACR,cAAc,EACd,cAAc,EACf,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAChD,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,WAAW,EACX,iBAAiB,EACjB,UAAU,EAEV,uBAAuB,EAEvB,sBAAsB,EAEvB,MAAM,mBAAmB,CAAC;AAiB3B;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,aAAa,CAAoC;IACzD,OAAO,CAAC,kBAAkB,CAAoC;IAC9D,OAAO,CAAC,eAAe,CAAsC;IAG7D,OAAO,CAAC,qBAAqB,CAA8C;IAG3E,OAAO,CAAC,cAAc,CAA6D;IAGnF,OAAO,CAAC,kBAAkB,CAAqD;IAI/E,OAAO,CAAC,uBAAuB,CAAwC;IAGvE,OAAO,CAAC,eAAe,CAAqB;IAE5C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAoCG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAoH7B;IA8BX,OAAO;IAeP,IAAI,KAAK,IAAI,MAAM,CAKlB;IAED,IAAI,KAAK,IAAI,WAAW,EAAE,CAMzB;IAED,QAAQ,IAAI,MAAM;IAIlB;;;;OAIG;IACH,MAAM,CAAC,oBAAoB,CAAC,CAAC,SAAS,QAAQ,EAAE,QAAQ,EAAE,CAAC,GAAG,CAAC;IAI/D;;;OAGG;WACU,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAI3D;;;OAGG;IACH,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa;IAShD;;;;;OAKG;IACH,OAAO,CAAC,mBAAmB;IAW3B;;;;;OAKG;IACH,uBAAuB,IAAI,gBAAgB;IAI3C;;;;;;OAMG;IACH,eAAe,CAAC,CAAC,SAAS,QAAQ,EAAE,EAAE,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,SAAS;IAiBrE;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAY9B,cAAc,EAAG,CAAC,EAAE,EAAE,MAAM,KAAK,KAAK,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC;IAC5D,kBAAkB,EAAG,CAAC,EAAE,EAAE,MAAM,KAAK,KAAK,CAAC,WAAW,CAAC,GAAG,SAAS,CAAC;IACpE,gBAAgB,EAAG,CAAC,EAAE,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC;IAChE,yBAAyB,EAAG,CAAC,EAAE,EAAE,MAAM,KAAK,KAAK,CAAC,kBAAkB,CAAC,GAAG,SAAS,CAAC;IAClF,gBAAgB,EAAG,CAAC,EAAE,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC;IAChE,mBAAmB,EAAG,CAAC,EAAE,EAAE,MAAM,KAAK,KAAK,CAAC,YAAY,CAAC,GAAG,SAAS,CAAC;IACtE,eAAe,EAAG,CAAC,EAAE,EAAE,MAAM,KAAK,KAAK,CAAC,QAAQ,CAAC,GAAG,SAAS,CAAC;IAC9D,mBAAmB,EAAG,CAAC,EAAE,EAAE,MAAM,KAAK,KAAK,CAAC,YAAY,CAAC,GAAG,SAAS,CAAC;IACtE,uBAAuB,EAAG,CAAC,EAAE,EAAE,MAAM,KAAK,KAAK,CAAC,gBAAgB,CAAC,GAAG,SAAS,CAAC;IAC9E,kBAAkB,EAAG,CAAC,EAAE,EAAE,MAAM,KAAK,KAAK,CAAC,WAAW,CAAC,GAAG,SAAS,CAAC;IACpE,eAAe,EAAG,CAAC,EAAE,EAAE,MAAM,KAAK,KAAK,CAAC,QAAQ,CAAC,GAAG,SAAS,CAAC;IAC9D,wBAAwB,EAAG,CAAC,EAAE,EAAE,MAAM,KAAK,KAAK,CAAC,iBAAiB,CAAC,GAAG,SAAS,CAAC;IAChF,mBAAmB,EAAG,CAAC,EAAE,EAAE,MAAM,KAAK,KAAK,CAAC,YAAY,CAAC,GAAG,SAAS,CAAC;IACtE,iBAAiB,EAAG,CAAC,EAAE,EAAE,MAAM,KAAK,KAAK,CAAC,UAAU,CAAC,GAAG,SAAS,CAAC;IAClE,wBAAwB,EAAG,CAAC,EAAE,EAAE,MAAM,KAAK,KAAK,CAAC,iBAAiB,CAAC,GAAG,SAAS,CAAC;IAChF,gBAAgB,EAAG,CAAC,EAAE,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC;IAChE,0BAA0B,EAAG,CAAC,EAAE,EAAE,MAAM,KAAK,KAAK,CAAC,mBAAmB,CAAC,GAAG,SAAS,CAAC;IACpF,+BAA+B,EAAG,CAAC,EAAE,EAAE,MAAM,KAAK,KAAK,CAAC,wBAAwB,CAAC,GAAG,SAAS,CAAC;IAC9F,yBAAyB,EAAG,CAAC,EAAE,EAAE,MAAM,KAAK,KAAK,CAAC,kBAAkB,CAAC,GAAG,SAAS,CAAC;IAClF,0BAA0B,EAAG,CAAC,EAAE,EAAE,MAAM,KAAK,KAAK,CAAC,mBAAmB,CAAC,GAAG,SAAS,CAAC;IACpF,oBAAoB,EAAG,CAAC,EAAE,EAAE,MAAM,KAAK,KAAK,CAAC,aAAa,CAAC,GAAG,SAAS,CAAC;IACxE,qBAAqB,EAAG,CAAC,EAAE,EAAE,MAAM,KAAK,KAAK,CAAC,cAAc,CAAC,GAAG,SAAS,CAAC;IAC1E,qBAAqB,EAAG,CAAC,EAAE,EAAE,MAAM,KAAK,KAAK,CAAC,cAAc,CAAC,GAAG,SAAS,CAAC;IAE1E;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAmB1B,WAAW,EAAG,MAAM,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;IACrC,eAAe,EAAG,MAAM,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;IAC7C,aAAa,EAAG,MAAM,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;IACzC,gBAAgB,EAAG,MAAM,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;IAC/C,oBAAoB,EAAG,MAAM,KAAK,CAAC,gBAAgB,CAAC,EAAE,CAAC;IACvD,sBAAsB,EAAG,MAAM,KAAK,CAAC,kBAAkB,CAAC,EAAE,CAAC;IAC3D,aAAa,EAAG,MAAM,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;IACzC,gBAAgB,EAAG,MAAM,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;IAC/C,YAAY,EAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;IACvC,eAAe,EAAG,MAAM,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;IAC7C,YAAY,EAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;IACvC,qBAAqB,EAAG,MAAM,KAAK,CAAC,iBAAiB,CAAC,EAAE,CAAC;IACzD,gBAAgB,EAAG,MAAM,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC;IAC/C,cAAc,EAAG,MAAM,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC;IAC3C,qBAAqB,EAAG,MAAM,KAAK,CAAC,iBAAiB,CAAC,EAAE,CAAC;IACzD,aAAa,EAAG,MAAM,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;IACzC,wBAAwB,EAAG,MAAM,KAAK,CAAC,mBAAmB,CAAC,EAAE,CAAC;IAC9D,4BAA4B,EAAG,MAAM,KAAK,CAAC,wBAAwB,CAAC,EAAE,CAAC;IACvE,sBAAsB,EAAG,MAAM,KAAK,CAAC,kBAAkB,CAAC,EAAE,CAAC;IAC3D,uBAAuB,EAAG,MAAM,KAAK,CAAC,mBAAmB,CAAC,EAAE,CAAC;IAC7D,iBAAiB,EAAG,MAAM,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC;IACjD,kBAAkB,EAAG,MAAM,KAAK,CAAC,cAAc,CAAC,EAAE,CAAC;IACnD,kBAAkB,EAAG,MAAM,KAAK,CAAC,cAAc,CAAC,EAAE,CAAC;IAEnD;;;;;OAKG;IACH,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,MAAM;IAiB3C;;;;OAIG;IACH,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;IAc1C;;;;OAIG;IACH,aAAa,CAAC,aAAa,EAAE,MAAM,EAAE,GAAG,MAAM;IAgB9C;;;OAGG;IACG,aAAa,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;IAUpE;;;OAGG;IACH,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAE9C;;;OAGG;IACH,IAAI,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA2DrD;;;;;;;OAOG;IACH,cAAc,CAAC,CAAC,SAAS,QAAQ,EAC/B,aAAa,EAAE,KAAK,CAAC,CAAC,CAAC,EACvB,OAAO,CAAC,EAAE,WAAW,GACpB,UAAU,CAAC,CAAC,CAAC;IAIhB;;;;;;;OAOG;IACH,kBAAkB,CAAC,CAAC,SAAS,QAAQ,EACnC,aAAa,EAAE,KAAK,CAAC,CAAC,CAAC,EACvB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,MAAM;IAMT;;;;;;;OAOG;IACH,yBAAyB,CAAC,CAAC,SAAS,QAAQ,GAAG,QAAQ,EACrD,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,uBAAuB,GAChC,KAAK,CAAC,CAAC,CAAC,EAAE;IA2Bb;;;;;;OAMG;IACH,iBAAiB,CAAC,CAAC,SAAS,QAAQ,GAAG,QAAQ,EAAE,OAAO,EAAE,sBAAsB,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE;CA6C9F"}
|