@metriport/fhir-sdk 1.2.5
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/LICENSE +21 -0
- package/README.md +124 -0
- package/dist/__tests__/env-setup.d.ts +2 -0
- package/dist/__tests__/env-setup.d.ts.map +1 -0
- package/dist/__tests__/env-setup.js +37 -0
- package/dist/__tests__/env-setup.js.map +1 -0
- package/dist/__tests__/fhir-bundle-sdk-basic.test.d.ts +2 -0
- package/dist/__tests__/fhir-bundle-sdk-basic.test.d.ts.map +1 -0
- package/dist/__tests__/fhir-bundle-sdk-basic.test.js +19 -0
- package/dist/__tests__/fhir-bundle-sdk-basic.test.js.map +1 -0
- package/dist/__tests__/fhir-bundle-sdk.test.d.ts +2 -0
- package/dist/__tests__/fhir-bundle-sdk.test.d.ts.map +1 -0
- package/dist/__tests__/fhir-bundle-sdk.test.js +433 -0
- package/dist/__tests__/fhir-bundle-sdk.test.js.map +1 -0
- package/dist/__tests__/fixtures/fhir-bundles.d.ts +31 -0
- package/dist/__tests__/fixtures/fhir-bundles.d.ts.map +1 -0
- package/dist/__tests__/fixtures/fhir-bundles.js +369 -0
- package/dist/__tests__/fixtures/fhir-bundles.js.map +1 -0
- package/dist/__tests__/phase1-verification.test.d.ts +2 -0
- package/dist/__tests__/phase1-verification.test.d.ts.map +1 -0
- package/dist/__tests__/phase1-verification.test.js +141 -0
- package/dist/__tests__/phase1-verification.test.js.map +1 -0
- package/dist/__tests__/phase2-verification.test.d.ts +2 -0
- package/dist/__tests__/phase2-verification.test.d.ts.map +1 -0
- package/dist/__tests__/phase2-verification.test.js +234 -0
- package/dist/__tests__/phase2-verification.test.js.map +1 -0
- package/dist/__tests__/phase3-verification.test.d.ts +2 -0
- package/dist/__tests__/phase3-verification.test.d.ts.map +1 -0
- package/dist/__tests__/phase3-verification.test.js +121 -0
- package/dist/__tests__/phase3-verification.test.js.map +1 -0
- package/dist/__tests__/phase4-verification.test.d.ts +2 -0
- package/dist/__tests__/phase4-verification.test.d.ts.map +1 -0
- package/dist/__tests__/phase4-verification.test.js +168 -0
- package/dist/__tests__/phase4-verification.test.js.map +1 -0
- package/dist/__tests__/phase5-verification.test.d.ts +2 -0
- package/dist/__tests__/phase5-verification.test.d.ts.map +1 -0
- package/dist/__tests__/phase5-verification.test.js +200 -0
- package/dist/__tests__/phase5-verification.test.js.map +1 -0
- package/dist/index.d.ts +245 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +681 -0
- package/dist/index.js.map +1 -0
- package/dist/types/smart-resources.d.ts +219 -0
- package/dist/types/smart-resources.d.ts.map +1 -0
- package/dist/types/smart-resources.js +140 -0
- package/dist/types/smart-resources.js.map +1 -0
- package/package.json +69 -0
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
/* eslint-disable @typescript-eslint/no-non-null-assertion */
|
|
4
|
+
const index_1 = require("../index");
|
|
5
|
+
const fhir_bundles_1 = require("./fixtures/fhir-bundles");
|
|
6
|
+
describe("Phase 5 Verification - Smart Reference Resolution", () => {
|
|
7
|
+
describe("FR-5.1: Resources returned by SDK have additional getter methods for each Reference field", () => {
|
|
8
|
+
it("should add reference methods to Observation resources", async () => {
|
|
9
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
|
|
10
|
+
const observations = sdk.getObservations();
|
|
11
|
+
expect(observations.length).toBeGreaterThan(0);
|
|
12
|
+
const observation = observations[0];
|
|
13
|
+
expect(typeof observation.getSubject).toBe("function");
|
|
14
|
+
expect(typeof observation.getEncounter).toBe("function");
|
|
15
|
+
expect(typeof observation.getPerformers).toBe("function");
|
|
16
|
+
});
|
|
17
|
+
it("should add reference methods to Encounter resources", async () => {
|
|
18
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
|
|
19
|
+
const encounters = sdk.getEncounters();
|
|
20
|
+
expect(encounters.length).toBeGreaterThan(0);
|
|
21
|
+
const encounter = encounters[0];
|
|
22
|
+
expect(typeof encounter.getSubject).toBe("function");
|
|
23
|
+
expect(typeof encounter.getParticipants).toBe("function");
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
describe("FR-5.2: For Observation.subject reference, SDK adds getSubject() method", () => {
|
|
27
|
+
it("should resolve subject reference to Patient", async () => {
|
|
28
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
|
|
29
|
+
const observations = sdk.getObservations();
|
|
30
|
+
expect(observations.length).toBeGreaterThan(0);
|
|
31
|
+
const observation = observations[0];
|
|
32
|
+
const subject = observation.getSubject();
|
|
33
|
+
expect(subject).toBeDefined();
|
|
34
|
+
expect(subject?.resourceType).toBe("Patient");
|
|
35
|
+
expect(subject?.id).toBe("patient-123");
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
describe("FR-5.3: For Observation.encounter reference, SDK adds getEncounter() method", () => {
|
|
39
|
+
it("should resolve encounter reference to Encounter", async () => {
|
|
40
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
|
|
41
|
+
const observations = sdk.getObservations();
|
|
42
|
+
expect(observations.length).toBeGreaterThan(0);
|
|
43
|
+
const observation = observations[0];
|
|
44
|
+
const encounter = observation.getEncounter();
|
|
45
|
+
expect(encounter).toBeDefined();
|
|
46
|
+
expect(encounter?.resourceType).toBe("Encounter");
|
|
47
|
+
expect(encounter?.id).toBe("encounter-789");
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
describe("FR-5.4: For Observation.performer reference array, SDK adds getPerformers() method", () => {
|
|
51
|
+
it("should resolve performer references to array of resources", async () => {
|
|
52
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
|
|
53
|
+
const observations = sdk.getObservations();
|
|
54
|
+
expect(observations.length).toBeGreaterThan(0);
|
|
55
|
+
const observation = observations[0];
|
|
56
|
+
const performers = observation.getPerformers();
|
|
57
|
+
expect(Array.isArray(performers)).toBe(true);
|
|
58
|
+
expect(performers.length).toBe(1);
|
|
59
|
+
expect(performers[0]?.resourceType).toBe("Practitioner");
|
|
60
|
+
expect(performers[0]?.id).toBe("practitioner-456");
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
describe("FR-5.5: Reference resolution methods handle both resource.id and fullUrl matching", () => {
|
|
64
|
+
it("should resolve references by resource.id", async () => {
|
|
65
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
|
|
66
|
+
const observations = sdk.getObservations();
|
|
67
|
+
expect(observations.length).toBeGreaterThan(0);
|
|
68
|
+
const observation = observations[0];
|
|
69
|
+
const subject = observation.getSubject();
|
|
70
|
+
expect(subject?.id).toBe("patient-123");
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
describe("FR-5.6: Reference resolution methods return undefined for unresolvable references", () => {
|
|
74
|
+
it("should return undefined for broken references", async () => {
|
|
75
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.bundleWithBrokenReferences);
|
|
76
|
+
const observations = sdk.getObservations();
|
|
77
|
+
if (observations.length > 0) {
|
|
78
|
+
const observation = observations[0];
|
|
79
|
+
expect(observation.getSubject()).toBeUndefined();
|
|
80
|
+
expect(observation.getEncounter()).toBeUndefined();
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
it("should return empty array for missing array references", async () => {
|
|
84
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.bundleWithBrokenReferences);
|
|
85
|
+
const observations = sdk.getObservations();
|
|
86
|
+
if (observations.length > 0) {
|
|
87
|
+
const observation = observations[0];
|
|
88
|
+
const performers = observation.getPerformers();
|
|
89
|
+
expect(Array.isArray(performers)).toBe(true);
|
|
90
|
+
expect(performers).toHaveLength(0);
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
describe("FR-5.7: Reference resolution operates in O(1) time complexity per reference", () => {
|
|
95
|
+
it("should resolve references in O(1) time", async () => {
|
|
96
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
|
|
97
|
+
const observations = sdk.getObservations();
|
|
98
|
+
expect(observations.length).toBeGreaterThan(0);
|
|
99
|
+
const observation = observations[0];
|
|
100
|
+
const start = performance.now();
|
|
101
|
+
observation.getSubject();
|
|
102
|
+
const end = performance.now();
|
|
103
|
+
expect(end - start).toBeLessThan(fhir_bundles_1.CONSTANT_TIME_EXPECTED_THRESHOLD_MS);
|
|
104
|
+
});
|
|
105
|
+
});
|
|
106
|
+
describe("FR-5.8: Original reference fields remain unchanged", () => {
|
|
107
|
+
it("should preserve original reference fields", async () => {
|
|
108
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
|
|
109
|
+
const observations = sdk.getObservations();
|
|
110
|
+
expect(observations.length).toBeGreaterThan(0);
|
|
111
|
+
const observation = observations[0];
|
|
112
|
+
expect(observation.subject).toEqual({ reference: "Patient/patient-123" });
|
|
113
|
+
expect(observation.encounter).toEqual({ reference: "Encounter/encounter-789" });
|
|
114
|
+
expect(observation.performer).toEqual([{ reference: "Practitioner/practitioner-456" }]);
|
|
115
|
+
});
|
|
116
|
+
it("should not include getter methods in JSON serialization", async () => {
|
|
117
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
|
|
118
|
+
const observations = sdk.getObservations();
|
|
119
|
+
expect(observations.length).toBeGreaterThan(0);
|
|
120
|
+
const observation = observations[0];
|
|
121
|
+
const serialized = JSON.stringify(observation);
|
|
122
|
+
expect(serialized).not.toContain("getSubject");
|
|
123
|
+
expect(serialized).not.toContain("getEncounter");
|
|
124
|
+
expect(serialized).not.toContain("getPerformer");
|
|
125
|
+
});
|
|
126
|
+
});
|
|
127
|
+
describe("Reference Chaining", () => {
|
|
128
|
+
it("should support chaining through resolved references", async () => {
|
|
129
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
|
|
130
|
+
const observations = sdk.getObservations();
|
|
131
|
+
expect(observations.length).toBeGreaterThan(0);
|
|
132
|
+
const observation = observations[0];
|
|
133
|
+
// Chain: Observation → Encounter → Patient
|
|
134
|
+
const patientViaChain = observation.getEncounter()?.getSubject();
|
|
135
|
+
expect(patientViaChain).toBeDefined();
|
|
136
|
+
expect(patientViaChain?.resourceType).toBe("Patient");
|
|
137
|
+
expect(patientViaChain?.id).toBe("patient-123");
|
|
138
|
+
});
|
|
139
|
+
it("should handle broken chains gracefully", async () => {
|
|
140
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.bundleWithBrokenReferences);
|
|
141
|
+
const observations = sdk.getObservations();
|
|
142
|
+
if (observations.length > 0) {
|
|
143
|
+
const observation = observations[0];
|
|
144
|
+
const brokenChain = observation.getEncounter()?.getSubject();
|
|
145
|
+
expect(brokenChain).toBeUndefined();
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
});
|
|
149
|
+
describe("Smart Resource Identity and Caching", () => {
|
|
150
|
+
it("should maintain object identity for cached resources", async () => {
|
|
151
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
|
|
152
|
+
const observation1 = sdk.getObservations()[0];
|
|
153
|
+
const observation2 = sdk.getObservations()[0];
|
|
154
|
+
expect(observation1).toBe(observation2);
|
|
155
|
+
});
|
|
156
|
+
it("should maintain consistency across different access methods", async () => {
|
|
157
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
|
|
158
|
+
const observationFromList = sdk.getObservations()[0];
|
|
159
|
+
const observationById = sdk.getResourceById("observation-001");
|
|
160
|
+
expect(observationFromList).toBe(observationById);
|
|
161
|
+
});
|
|
162
|
+
it("should cache resolved references", async () => {
|
|
163
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
|
|
164
|
+
const observations = sdk.getObservations();
|
|
165
|
+
expect(observations.length).toBeGreaterThan(0);
|
|
166
|
+
const observation = observations[0];
|
|
167
|
+
const subject1 = observation.getSubject();
|
|
168
|
+
const subject2 = observation.getSubject();
|
|
169
|
+
expect(subject1).toBe(subject2);
|
|
170
|
+
});
|
|
171
|
+
});
|
|
172
|
+
describe("Array Reference Chaining", () => {
|
|
173
|
+
it("should support chaining through array elements", async () => {
|
|
174
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
|
|
175
|
+
const reports = sdk.getDiagnosticReports();
|
|
176
|
+
if (reports.length > 0) {
|
|
177
|
+
const report = reports[0];
|
|
178
|
+
const results = report.getResults();
|
|
179
|
+
expect(Array.isArray(results)).toBe(true);
|
|
180
|
+
if (results.length > 0) {
|
|
181
|
+
const firstResult = results[0];
|
|
182
|
+
expect(typeof firstResult.getSubject).toBe("function");
|
|
183
|
+
const patient = firstResult.getSubject();
|
|
184
|
+
expect(patient?.resourceType).toBe("Patient");
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
});
|
|
188
|
+
});
|
|
189
|
+
describe("Smart Resource Marker", () => {
|
|
190
|
+
it("should mark resources as smart resources", async () => {
|
|
191
|
+
const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
|
|
192
|
+
const observations = sdk.getObservations();
|
|
193
|
+
expect(observations.length).toBeGreaterThan(0);
|
|
194
|
+
const observation = observations[0];
|
|
195
|
+
// Check the smart resource marker
|
|
196
|
+
expect(observation.__isSmartResource).toBe(true);
|
|
197
|
+
});
|
|
198
|
+
});
|
|
199
|
+
});
|
|
200
|
+
//# sourceMappingURL=phase5-verification.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"phase5-verification.test.js","sourceRoot":"","sources":["../../src/__tests__/phase5-verification.test.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,245 @@
|
|
|
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
|
+
export { Smart } from "./types/smart-resources";
|
|
4
|
+
export { AllergyIntolerance, Bundle, 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";
|
|
5
|
+
/**
|
|
6
|
+
* Validation result interface
|
|
7
|
+
*/
|
|
8
|
+
export interface ValidationResult {
|
|
9
|
+
hasBrokenReferences: boolean;
|
|
10
|
+
brokenReferences: BrokenReference[];
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Broken reference details interface
|
|
14
|
+
*/
|
|
15
|
+
export interface BrokenReference {
|
|
16
|
+
sourceResourceId: string;
|
|
17
|
+
sourceResourceType: string;
|
|
18
|
+
referenceField: string;
|
|
19
|
+
reference: string;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Bundle diff result interface
|
|
23
|
+
*/
|
|
24
|
+
export interface BundleDiffResult {
|
|
25
|
+
/** Resources that exist in both bundles */
|
|
26
|
+
common: FhirBundleSdk;
|
|
27
|
+
/** Resources that exist only in the base bundle (this bundle) */
|
|
28
|
+
baseOnly: FhirBundleSdk;
|
|
29
|
+
/** Resources that exist only in the parameter bundle */
|
|
30
|
+
parameterOnly: FhirBundleSdk;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* FHIR Bundle SDK for parsing, querying, and manipulating FHIR bundles with reference resolution
|
|
34
|
+
*/
|
|
35
|
+
export declare class FhirBundleSdk {
|
|
36
|
+
private bundle;
|
|
37
|
+
private resourcesById;
|
|
38
|
+
private resourcesByFullUrl;
|
|
39
|
+
private resourcesByType;
|
|
40
|
+
private smartResourceCache;
|
|
41
|
+
private smartResourceArrayCache;
|
|
42
|
+
private resolutionStack;
|
|
43
|
+
/**
|
|
44
|
+
* Configuration for dynamically generated resource getter methods.
|
|
45
|
+
*
|
|
46
|
+
* Each entry in this array automatically generates both single and collection getter methods.
|
|
47
|
+
*
|
|
48
|
+
* **Example:**
|
|
49
|
+
* ```typescript
|
|
50
|
+
* {
|
|
51
|
+
* resourceType: 'Patient',
|
|
52
|
+
* singleGetterMethodName: 'getPatientById',
|
|
53
|
+
* collectionGetterMethodName: 'getPatients'
|
|
54
|
+
* }
|
|
55
|
+
* ```
|
|
56
|
+
*
|
|
57
|
+
* **Generates the equivalent of:**
|
|
58
|
+
* ```typescript
|
|
59
|
+
* // Single resource getter
|
|
60
|
+
* getPatientById(id: string): Smart<Patient> | undefined {
|
|
61
|
+
* return this.getResourceByIdAndType<Patient>(id, 'Patient');
|
|
62
|
+
* }
|
|
63
|
+
*
|
|
64
|
+
* // Collection getter
|
|
65
|
+
* getPatients(): Smart<Patient>[] {
|
|
66
|
+
* return this.getResourcesByType<Patient>('Patient');
|
|
67
|
+
* }
|
|
68
|
+
* ```
|
|
69
|
+
*
|
|
70
|
+
* **Usage:**
|
|
71
|
+
* ```typescript
|
|
72
|
+
* const sdk = await FhirBundleSdk.create(bundle);
|
|
73
|
+
* const patient = sdk.getPatientById('patient-123'); // Smart<Patient> | undefined
|
|
74
|
+
* const allPatients = sdk.getPatients(); // Smart<Patient>[]
|
|
75
|
+
* ```
|
|
76
|
+
*
|
|
77
|
+
* To add a new resource type, simply add a new entry to this array and declare
|
|
78
|
+
* the corresponding method signatures in the class body.
|
|
79
|
+
*/
|
|
80
|
+
private static readonly RESOURCE_METHODS;
|
|
81
|
+
private constructor();
|
|
82
|
+
get total(): number;
|
|
83
|
+
get entry(): BundleEntry[];
|
|
84
|
+
toObject(): Bundle;
|
|
85
|
+
/**
|
|
86
|
+
* Create a new FhirBundleSdk instance (async for backwards compatibility)
|
|
87
|
+
* FR-1.2: Validate bundle resourceType
|
|
88
|
+
*/
|
|
89
|
+
static create(bundle: Bundle): Promise<FhirBundleSdk>;
|
|
90
|
+
/**
|
|
91
|
+
* Create a new FhirBundleSdk instance synchronously
|
|
92
|
+
* FR-1.2: Validate bundle resourceType
|
|
93
|
+
*/
|
|
94
|
+
static createSync(bundle: Bundle): FhirBundleSdk;
|
|
95
|
+
/**
|
|
96
|
+
* Build O(1) indexes for resource lookup
|
|
97
|
+
*/
|
|
98
|
+
private buildResourceIndexes;
|
|
99
|
+
/**
|
|
100
|
+
* Create a smart resource with reference resolution methods
|
|
101
|
+
* FR-5.1: Resources returned by SDK have additional getter methods for each Reference field
|
|
102
|
+
* FR-5.7: Reference resolution operates in O(1) time complexity per reference
|
|
103
|
+
* FR-5.8: Original reference fields remain unchanged
|
|
104
|
+
*/
|
|
105
|
+
private createSmartResource;
|
|
106
|
+
/**
|
|
107
|
+
* Resolve a reference method call to actual resources
|
|
108
|
+
* FR-5.2-5.6: Handle different reference types and patterns
|
|
109
|
+
*/
|
|
110
|
+
private resolveReference;
|
|
111
|
+
/**
|
|
112
|
+
* Resolve a single reference object to a resource
|
|
113
|
+
* FR-5.5: Reference resolution methods handle both resource.id and fullUrl matching
|
|
114
|
+
*/
|
|
115
|
+
private resolveReferenceObject;
|
|
116
|
+
/**
|
|
117
|
+
* Check if a reference field expects an array of references
|
|
118
|
+
*/
|
|
119
|
+
private isArrayReferenceField;
|
|
120
|
+
/**
|
|
121
|
+
* Find all Reference fields in a resource recursively
|
|
122
|
+
*/
|
|
123
|
+
private findAllReferences;
|
|
124
|
+
/**
|
|
125
|
+
* Check if a reference can be resolved within the bundle
|
|
126
|
+
*/
|
|
127
|
+
private canResolveReference;
|
|
128
|
+
/**
|
|
129
|
+
* FR-2.1: Validate all references in the bundle
|
|
130
|
+
* FR-2.2: Identifies references by Resource/id pattern and fullUrl references
|
|
131
|
+
* FR-2.3: Handles both relative and absolute references
|
|
132
|
+
* FR-2.4: Returns validation result with broken reference details
|
|
133
|
+
*/
|
|
134
|
+
lookForBrokenReferences(): ValidationResult;
|
|
135
|
+
/**
|
|
136
|
+
* FR-3.1: Get resource by ID with type parameter support
|
|
137
|
+
* FR-3.2: Method searches both resource.id and entry.fullUrl for matches
|
|
138
|
+
* FR-3.4: Method returns undefined if resource not found
|
|
139
|
+
* FR-3.5: Lookup operates in O(1) time complexity
|
|
140
|
+
* FR-5.1: Returns smart resource with reference resolution methods
|
|
141
|
+
*/
|
|
142
|
+
getResourceById<T extends Resource>(id: string): Smart<T> | undefined;
|
|
143
|
+
/**
|
|
144
|
+
* Generic helper method to get a resource by ID with type validation
|
|
145
|
+
*/
|
|
146
|
+
private getResourceByIdAndType;
|
|
147
|
+
getPatientById: (id: string) => Smart<Patient> | undefined;
|
|
148
|
+
getObservationById: (id: string) => Smart<Observation> | undefined;
|
|
149
|
+
getEncounterById: (id: string) => Smart<Encounter> | undefined;
|
|
150
|
+
getAllergyIntoleranceById: (id: string) => Smart<AllergyIntolerance> | undefined;
|
|
151
|
+
getConditionById: (id: string) => Smart<Condition> | undefined;
|
|
152
|
+
getOrganizationById: (id: string) => Smart<Organization> | undefined;
|
|
153
|
+
getLocationById: (id: string) => Smart<Location> | undefined;
|
|
154
|
+
getPractitionerById: (id: string) => Smart<Practitioner> | undefined;
|
|
155
|
+
getDiagnosticReportById: (id: string) => Smart<DiagnosticReport> | undefined;
|
|
156
|
+
getCompositionById: (id: string) => Smart<Composition> | undefined;
|
|
157
|
+
getCoverageById: (id: string) => Smart<Coverage> | undefined;
|
|
158
|
+
getDocumentReferenceById: (id: string) => Smart<DocumentReference> | undefined;
|
|
159
|
+
getImmunizationById: (id: string) => Smart<Immunization> | undefined;
|
|
160
|
+
getMedicationById: (id: string) => Smart<Medication> | undefined;
|
|
161
|
+
getMedicationRequestById: (id: string) => Smart<MedicationRequest> | undefined;
|
|
162
|
+
getProcedureById: (id: string) => Smart<Procedure> | undefined;
|
|
163
|
+
getFamilyMemberHistoryById: (id: string) => Smart<FamilyMemberHistory> | undefined;
|
|
164
|
+
getMedicationAdministrationById: (id: string) => Smart<MedicationAdministration> | undefined;
|
|
165
|
+
getMedicationDispenseById: (id: string) => Smart<MedicationDispense> | undefined;
|
|
166
|
+
getMedicationStatementById: (id: string) => Smart<MedicationStatement> | undefined;
|
|
167
|
+
getRelatedPersonById: (id: string) => Smart<RelatedPerson> | undefined;
|
|
168
|
+
getRiskAssessmentById: (id: string) => Smart<RiskAssessment> | undefined;
|
|
169
|
+
getServiceRequestById: (id: string) => Smart<ServiceRequest> | undefined;
|
|
170
|
+
/**
|
|
171
|
+
* Generic helper method to get all resources of a specific type
|
|
172
|
+
* FR-10.1: Returns references to cached objects, not copies
|
|
173
|
+
*/
|
|
174
|
+
private getResourcesByType;
|
|
175
|
+
getPatients: () => Smart<Patient>[];
|
|
176
|
+
getObservations: () => Smart<Observation>[];
|
|
177
|
+
getEncounters: () => Smart<Encounter>[];
|
|
178
|
+
getPractitioners: () => Smart<Practitioner>[];
|
|
179
|
+
getDiagnosticReports: () => Smart<DiagnosticReport>[];
|
|
180
|
+
getAllergyIntolerances: () => Smart<AllergyIntolerance>[];
|
|
181
|
+
getConditions: () => Smart<Condition>[];
|
|
182
|
+
getOrganizations: () => Smart<Organization>[];
|
|
183
|
+
getLocations: () => Smart<Location>[];
|
|
184
|
+
getCompositions: () => Smart<Composition>[];
|
|
185
|
+
getCoverages: () => Smart<Coverage>[];
|
|
186
|
+
getDocumentReferences: () => Smart<DocumentReference>[];
|
|
187
|
+
getImmunizations: () => Smart<Immunization>[];
|
|
188
|
+
getMedications: () => Smart<Medication>[];
|
|
189
|
+
getMedicationRequests: () => Smart<MedicationRequest>[];
|
|
190
|
+
getProcedures: () => Smart<Procedure>[];
|
|
191
|
+
getFamilyMemberHistories: () => Smart<FamilyMemberHistory>[];
|
|
192
|
+
getMedicationAdministrations: () => Smart<MedicationAdministration>[];
|
|
193
|
+
getMedicationDispenses: () => Smart<MedicationDispense>[];
|
|
194
|
+
getMedicationStatements: () => Smart<MedicationStatement>[];
|
|
195
|
+
getRelatedPersons: () => Smart<RelatedPerson>[];
|
|
196
|
+
getRiskAssessments: () => Smart<RiskAssessment>[];
|
|
197
|
+
getServiceRequests: () => Smart<ServiceRequest>[];
|
|
198
|
+
/**
|
|
199
|
+
* Create a new bundle entry from an existing entry, preserving fullUrl
|
|
200
|
+
*/
|
|
201
|
+
private createBundleEntry;
|
|
202
|
+
/**
|
|
203
|
+
* Create a new bundle with specified entries, maintaining original metadata
|
|
204
|
+
*/
|
|
205
|
+
private createExportBundle;
|
|
206
|
+
/**
|
|
207
|
+
* Find original bundle entry for a given resource
|
|
208
|
+
*/
|
|
209
|
+
private findOriginalEntry;
|
|
210
|
+
/**
|
|
211
|
+
* FR-6.1: Export subset of resources by their IDs
|
|
212
|
+
* FR-6.4: Exported bundles maintain original bundle metadata but update total count
|
|
213
|
+
* FR-6.5: Exported bundles include only resources that exist in the original bundle
|
|
214
|
+
* FR-6.6: Exported bundles preserve original entry.fullUrl values
|
|
215
|
+
*/
|
|
216
|
+
exportSubset(resourceIds: string[]): Bundle;
|
|
217
|
+
/**
|
|
218
|
+
* FR-6.2: Export all resources of a specific type
|
|
219
|
+
* FR-6.4: Exported bundles maintain original bundle metadata but update total count
|
|
220
|
+
* FR-6.6: Exported bundles preserve original entry.fullUrl values
|
|
221
|
+
*/
|
|
222
|
+
exportByType(resourceType: string): Bundle;
|
|
223
|
+
/**
|
|
224
|
+
* FR-6.3: Export all resources of specified types
|
|
225
|
+
* FR-6.4: Exported bundles maintain original bundle metadata but update total count
|
|
226
|
+
* FR-6.6: Exported bundles preserve original entry.fullUrl values
|
|
227
|
+
*/
|
|
228
|
+
exportByTypes(resourceTypes: string[]): Bundle;
|
|
229
|
+
/**
|
|
230
|
+
* Concatenate entries from another FhirBundleSdk with this bundle
|
|
231
|
+
* Returns a new bundle with combined entries while preserving original metadata
|
|
232
|
+
*/
|
|
233
|
+
concatEntries(otherSdk: FhirBundleSdk): Promise<FhirBundleSdk>;
|
|
234
|
+
/**
|
|
235
|
+
* Diff this bundle with another FHIR Bundle by comparing resource ids.
|
|
236
|
+
* Returns three FhirBundleSdk instances: common, baseOnly, parameterOnly.
|
|
237
|
+
*/
|
|
238
|
+
diff(other: Bundle): Promise<BundleDiffResult>;
|
|
239
|
+
/**
|
|
240
|
+
* Diff this bundle with another FhirBundleSdk by comparing resource ids.
|
|
241
|
+
* Returns three FhirBundleSdk instances: common, baseOnly, parameterOnly.
|
|
242
|
+
*/
|
|
243
|
+
diff(other: FhirBundleSdk): Promise<BundleDiffResult>;
|
|
244
|
+
}
|
|
245
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|