@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.
Files changed (92) hide show
  1. package/README.md +207 -0
  2. package/dist/__tests__/clinical-dates.test.d.ts +2 -0
  3. package/dist/__tests__/clinical-dates.test.d.ts.map +1 -0
  4. package/dist/__tests__/clinical-dates.test.js +341 -0
  5. package/dist/__tests__/clinical-dates.test.js.map +1 -0
  6. package/dist/__tests__/date-range-performance.test.d.ts +2 -0
  7. package/dist/__tests__/date-range-performance.test.d.ts.map +1 -0
  8. package/dist/__tests__/date-range-performance.test.js +218 -0
  9. package/dist/__tests__/date-range-performance.test.js.map +1 -0
  10. package/dist/__tests__/date-range-search.test.d.ts +2 -0
  11. package/dist/__tests__/date-range-search.test.d.ts.map +1 -0
  12. package/dist/__tests__/date-range-search.test.js +215 -0
  13. package/dist/__tests__/date-range-search.test.js.map +1 -0
  14. package/dist/__tests__/fhir-bundle-sdk.test.js +467 -0
  15. package/dist/__tests__/fhir-bundle-sdk.test.js.map +1 -1
  16. package/dist/__tests__/reverse-references.test.d.ts +2 -0
  17. package/dist/__tests__/reverse-references.test.d.ts.map +1 -0
  18. package/dist/__tests__/reverse-references.test.js +241 -0
  19. package/dist/__tests__/reverse-references.test.js.map +1 -0
  20. package/dist/clinical-dates.d.ts +26 -0
  21. package/dist/clinical-dates.d.ts.map +1 -0
  22. package/dist/clinical-dates.js +571 -0
  23. package/dist/clinical-dates.js.map +1 -0
  24. package/dist/demo-reverse-references.d.ts +7 -0
  25. package/dist/demo-reverse-references.d.ts.map +1 -0
  26. package/dist/demo-reverse-references.js +207 -0
  27. package/dist/demo-reverse-references.js.map +1 -0
  28. package/dist/fhir-bundle-sdk.d.ts +222 -0
  29. package/dist/fhir-bundle-sdk.d.ts.map +1 -0
  30. package/dist/fhir-bundle-sdk.js +527 -0
  31. package/dist/fhir-bundle-sdk.js.map +1 -0
  32. package/dist/index.d.ts +3 -242
  33. package/dist/index.d.ts.map +1 -1
  34. package/dist/index.js +5 -678
  35. package/dist/index.js.map +1 -1
  36. package/dist/internal/bundle-operations.d.ts +14 -0
  37. package/dist/internal/bundle-operations.d.ts.map +1 -0
  38. package/dist/internal/bundle-operations.js +55 -0
  39. package/dist/internal/bundle-operations.js.map +1 -0
  40. package/dist/internal/date-extraction.d.ts +12 -0
  41. package/dist/internal/date-extraction.d.ts.map +1 -0
  42. package/dist/internal/date-extraction.js +629 -0
  43. package/dist/internal/date-extraction.js.map +1 -0
  44. package/dist/internal/graph-traversal.d.ts +13 -0
  45. package/dist/internal/graph-traversal.d.ts.map +1 -0
  46. package/dist/internal/graph-traversal.js +89 -0
  47. package/dist/internal/graph-traversal.js.map +1 -0
  48. package/dist/internal/indexing.d.ts +17 -0
  49. package/dist/internal/indexing.d.ts.map +1 -0
  50. package/dist/internal/indexing.js +118 -0
  51. package/dist/internal/indexing.js.map +1 -0
  52. package/dist/internal/llm-context.d.ts +39 -0
  53. package/dist/internal/llm-context.d.ts.map +1 -0
  54. package/dist/internal/llm-context.js +188 -0
  55. package/dist/internal/llm-context.js.map +1 -0
  56. package/dist/internal/reference-resolution.d.ts +25 -0
  57. package/dist/internal/reference-resolution.d.ts.map +1 -0
  58. package/dist/internal/reference-resolution.js +133 -0
  59. package/dist/internal/reference-resolution.js.map +1 -0
  60. package/dist/internal/reference-utils.d.ts +26 -0
  61. package/dist/internal/reference-utils.d.ts.map +1 -0
  62. package/dist/internal/reference-utils.js +89 -0
  63. package/dist/internal/reference-utils.js.map +1 -0
  64. package/dist/internal/validation.d.ts +16 -0
  65. package/dist/internal/validation.d.ts.map +1 -0
  66. package/dist/internal/validation.js +45 -0
  67. package/dist/internal/validation.js.map +1 -0
  68. package/dist/types/sdk-types.d.ts +107 -0
  69. package/dist/types/sdk-types.d.ts.map +1 -0
  70. package/dist/types/sdk-types.js +17 -0
  71. package/dist/types/sdk-types.js.map +1 -0
  72. package/dist/types/smart-resources.d.ts +97 -4
  73. package/dist/types/smart-resources.d.ts.map +1 -1
  74. package/dist/types/smart-resources.js +82 -5
  75. package/dist/types/smart-resources.js.map +1 -1
  76. package/dist/utils/interval-tree/index.d.ts +87 -0
  77. package/dist/utils/interval-tree/index.d.ts.map +1 -0
  78. package/dist/utils/interval-tree/index.js +774 -0
  79. package/dist/utils/interval-tree/index.js.map +1 -0
  80. package/dist/utils/interval-tree/shallowequal/arrays.d.ts +3 -0
  81. package/dist/utils/interval-tree/shallowequal/arrays.d.ts.map +1 -0
  82. package/dist/utils/interval-tree/shallowequal/arrays.js +25 -0
  83. package/dist/utils/interval-tree/shallowequal/arrays.js.map +1 -0
  84. package/dist/utils/interval-tree/shallowequal/index.d.ts +6 -0
  85. package/dist/utils/interval-tree/shallowequal/index.d.ts.map +1 -0
  86. package/dist/utils/interval-tree/shallowequal/index.js +28 -0
  87. package/dist/utils/interval-tree/shallowequal/index.js.map +1 -0
  88. package/dist/utils/interval-tree/shallowequal/objects.d.ts +3 -0
  89. package/dist/utils/interval-tree/shallowequal/objects.d.ts.map +1 -0
  90. package/dist/utils/interval-tree/shallowequal/objects.js +28 -0
  91. package/dist/utils/interval-tree/shallowequal/objects.js.map +1 -0
  92. 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":"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"}