gdc-common-utils-ts 1.14.9 → 1.14.13
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 +55 -2
- package/dist/claims/claim-list-helpers.d.ts +21 -0
- package/dist/claims/claim-list-helpers.js +50 -0
- package/dist/claims/claims-helpers-allergy-intolerance.d.ts +10 -0
- package/dist/claims/claims-helpers-allergy-intolerance.js +47 -0
- package/dist/claims/claims-helpers-appointment-response.d.ts +8 -0
- package/dist/claims/claims-helpers-appointment-response.js +20 -0
- package/dist/claims/claims-helpers-appointment.d.ts +10 -0
- package/dist/claims/claims-helpers-appointment.js +26 -0
- package/dist/claims/claims-helpers-care-plan.d.ts +8 -0
- package/dist/claims/claims-helpers-care-plan.js +20 -0
- package/dist/claims/claims-helpers-clinical-impression.d.ts +10 -0
- package/dist/claims/claims-helpers-clinical-impression.js +26 -0
- package/dist/claims/claims-helpers-communication.d.ts +17 -0
- package/dist/claims/claims-helpers-communication.js +57 -0
- package/dist/claims/claims-helpers-composition.d.ts +12 -0
- package/dist/claims/claims-helpers-composition.js +32 -0
- package/dist/claims/claims-helpers-condition.d.ts +10 -0
- package/dist/claims/claims-helpers-condition.js +47 -0
- package/dist/claims/claims-helpers-consent.d.ts +112 -0
- package/dist/claims/claims-helpers-consent.js +271 -0
- package/dist/claims/claims-helpers-coverage.d.ts +10 -0
- package/dist/claims/claims-helpers-coverage.js +26 -0
- package/dist/claims/claims-helpers-device-use-statement.d.ts +8 -0
- package/dist/claims/claims-helpers-device-use-statement.js +20 -0
- package/dist/claims/claims-helpers-device.d.ts +8 -0
- package/dist/claims/claims-helpers-device.js +20 -0
- package/dist/claims/claims-helpers-diagnostic-report.d.ts +12 -0
- package/dist/claims/claims-helpers-diagnostic-report.js +32 -0
- package/dist/claims/claims-helpers-document-reference.d.ts +8 -0
- package/dist/claims/claims-helpers-document-reference.js +20 -0
- package/dist/claims/claims-helpers-encounter.d.ts +10 -0
- package/dist/claims/claims-helpers-encounter.js +26 -0
- package/dist/claims/claims-helpers-flag.d.ts +8 -0
- package/dist/claims/claims-helpers-flag.js +20 -0
- package/dist/claims/claims-helpers-immunization.d.ts +8 -0
- package/dist/claims/claims-helpers-immunization.js +20 -0
- package/dist/claims/claims-helpers-location.d.ts +10 -0
- package/dist/claims/claims-helpers-location.js +26 -0
- package/dist/claims/claims-helpers-medication-statement.d.ts +88 -0
- package/dist/claims/claims-helpers-medication-statement.js +259 -0
- package/dist/claims/claims-helpers-observation.d.ts +8 -0
- package/dist/claims/claims-helpers-observation.js +20 -0
- package/dist/claims/claims-helpers-organization.d.ts +12 -0
- package/dist/claims/claims-helpers-organization.js +32 -0
- package/dist/claims/claims-helpers-procedure.d.ts +8 -0
- package/dist/claims/claims-helpers-procedure.js +20 -0
- package/dist/claims/claims-helpers-related-person.d.ts +8 -0
- package/dist/claims/claims-helpers-related-person.js +20 -0
- package/dist/claims/index.d.ts +24 -0
- package/dist/claims/index.js +24 -0
- package/dist/constants/fhir-resource-types.d.ts +16 -0
- package/dist/constants/fhir-resource-types.js +8 -0
- package/dist/convert/convert-allergy-intolerance.d.ts +3 -0
- package/dist/convert/convert-allergy-intolerance.js +34 -0
- package/dist/convert/convert-appointment-response.d.ts +3 -0
- package/dist/convert/convert-appointment-response.js +32 -0
- package/dist/convert/convert-appointment.d.ts +3 -0
- package/dist/convert/convert-appointment.js +61 -0
- package/dist/convert/convert-care-plan.d.ts +3 -0
- package/dist/convert/convert-care-plan.js +58 -0
- package/dist/convert/convert-clinical-impression.d.ts +3 -0
- package/dist/convert/convert-clinical-impression.js +42 -0
- package/dist/convert/convert-composition.d.ts +3 -0
- package/dist/convert/convert-composition.js +35 -0
- package/dist/convert/convert-condition.d.ts +3 -0
- package/dist/convert/convert-condition.js +24 -0
- package/dist/convert/convert-coverage.d.ts +3 -0
- package/dist/convert/convert-coverage.js +51 -0
- package/dist/convert/convert-device-use-statement.d.ts +3 -0
- package/dist/convert/convert-device-use-statement.js +28 -0
- package/dist/convert/convert-device.d.ts +3 -0
- package/dist/convert/convert-device.js +37 -0
- package/dist/convert/convert-diagnostic-report.d.ts +3 -0
- package/dist/convert/convert-diagnostic-report.js +55 -0
- package/dist/convert/convert-document-reference.d.ts +3 -0
- package/dist/convert/convert-document-reference.js +35 -0
- package/dist/convert/convert-encounter.d.ts +3 -0
- package/dist/convert/convert-encounter.js +68 -0
- package/dist/convert/convert-flag.d.ts +3 -0
- package/dist/convert/convert-flag.js +34 -0
- package/dist/convert/convert-immunization.d.ts +3 -0
- package/dist/convert/convert-immunization.js +56 -0
- package/dist/convert/convert-location.d.ts +3 -0
- package/dist/convert/convert-location.js +44 -0
- package/dist/convert/convert-medication-statement.d.ts +3 -0
- package/dist/convert/convert-medication-statement.js +64 -0
- package/dist/convert/convert-observation.d.ts +3 -0
- package/dist/convert/convert-observation.js +57 -0
- package/dist/convert/convert-organization.d.ts +3 -0
- package/dist/convert/convert-organization.js +39 -0
- package/dist/convert/convert-procedure.d.ts +3 -0
- package/dist/convert/convert-procedure.js +50 -0
- package/dist/convert/convert-related-person.d.ts +3 -0
- package/dist/convert/convert-related-person.js +31 -0
- package/dist/convert/convert-shared.d.ts +34 -0
- package/dist/convert/convert-shared.js +179 -0
- package/dist/convert/index.d.ts +22 -0
- package/dist/convert/index.js +22 -0
- package/dist/examples/communication-bundle-document-request.js +2 -2
- package/dist/examples/communication-bundle-session.js +2 -2
- package/dist/examples/shared.d.ts +21 -2
- package/dist/examples/shared.js +74 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.js +2 -0
- package/dist/models/bundle.d.ts +13 -1
- package/dist/models/interoperable-claims/appointment-claims.d.ts +23 -1
- package/dist/models/interoperable-claims/appointment-claims.js +22 -1
- package/dist/models/interoperable-claims/appointment-response-claims.d.ts +14 -0
- package/dist/models/interoperable-claims/appointment-response-claims.js +13 -0
- package/dist/models/interoperable-claims/care-plan-claims.d.ts +24 -0
- package/dist/models/interoperable-claims/care-plan-claims.js +44 -0
- package/dist/models/interoperable-claims/clinical-impression-claims.d.ts +17 -0
- package/dist/models/interoperable-claims/clinical-impression-claims.js +30 -0
- package/dist/models/interoperable-claims/coverage-claims.d.ts +16 -0
- package/dist/models/interoperable-claims/coverage-claims.js +28 -0
- package/dist/models/interoperable-claims/device-claims.d.ts +18 -0
- package/dist/models/interoperable-claims/device-claims.js +32 -0
- package/dist/models/interoperable-claims/diagnostic-report-claims.d.ts +2 -2
- package/dist/models/interoperable-claims/diagnostic-report-claims.js +1 -1
- package/dist/models/interoperable-claims/encounter-claims.d.ts +18 -0
- package/dist/models/interoperable-claims/encounter-claims.js +32 -0
- package/dist/models/interoperable-claims/flag-claims.d.ts +16 -0
- package/dist/models/interoperable-claims/flag-claims.js +28 -0
- package/dist/models/interoperable-claims/immunization-claims.d.ts +23 -0
- package/dist/models/interoperable-claims/immunization-claims.js +42 -0
- package/dist/models/interoperable-claims/index.d.ts +12 -0
- package/dist/models/interoperable-claims/index.js +12 -0
- package/dist/models/interoperable-claims/location-claims.d.ts +22 -0
- package/dist/models/interoperable-claims/location-claims.js +34 -0
- package/dist/models/interoperable-claims/observation-claims.d.ts +26 -0
- package/dist/models/interoperable-claims/observation-claims.js +48 -0
- package/dist/models/interoperable-claims/organization-claims.d.ts +18 -0
- package/dist/models/interoperable-claims/organization-claims.js +27 -0
- package/dist/models/interoperable-claims/procedure-claims.d.ts +22 -0
- package/dist/models/interoperable-claims/procedure-claims.js +40 -0
- package/dist/models/interoperable-claims/related-person-claims.d.ts +14 -0
- package/dist/models/interoperable-claims/related-person-claims.js +24 -0
- package/dist/utils/appointment-claim-helpers.d.ts +10 -0
- package/dist/utils/appointment-claim-helpers.js +26 -0
- package/dist/utils/appointment-response-claim-helpers.d.ts +8 -0
- package/dist/utils/appointment-response-claim-helpers.js +20 -0
- package/dist/utils/bundle-document-builder.d.ts +36 -0
- package/dist/utils/bundle-document-builder.js +311 -0
- package/dist/utils/claims-helpers-allergy-intolerance.d.ts +1 -0
- package/dist/utils/claims-helpers-allergy-intolerance.js +1 -0
- package/dist/utils/claims-helpers-appointment-response.d.ts +1 -0
- package/dist/utils/claims-helpers-appointment-response.js +1 -0
- package/dist/utils/claims-helpers-appointment.d.ts +1 -0
- package/dist/utils/claims-helpers-appointment.js +1 -0
- package/dist/utils/claims-helpers-care-plan.d.ts +1 -0
- package/dist/utils/claims-helpers-care-plan.js +1 -0
- package/dist/utils/claims-helpers-clinical-impression.d.ts +1 -0
- package/dist/utils/claims-helpers-clinical-impression.js +1 -0
- package/dist/utils/claims-helpers-communication.d.ts +1 -0
- package/dist/utils/claims-helpers-communication.js +1 -0
- package/dist/utils/claims-helpers-composition.d.ts +1 -0
- package/dist/utils/claims-helpers-composition.js +1 -0
- package/dist/utils/claims-helpers-condition.d.ts +1 -0
- package/dist/utils/claims-helpers-condition.js +1 -0
- package/dist/utils/claims-helpers-consent.d.ts +1 -0
- package/dist/utils/claims-helpers-consent.js +1 -0
- package/dist/utils/claims-helpers-coverage.d.ts +1 -0
- package/dist/utils/claims-helpers-coverage.js +1 -0
- package/dist/utils/claims-helpers-device-use-statement.d.ts +1 -0
- package/dist/utils/claims-helpers-device-use-statement.js +1 -0
- package/dist/utils/claims-helpers-device.d.ts +1 -0
- package/dist/utils/claims-helpers-device.js +1 -0
- package/dist/utils/claims-helpers-diagnostic-report.d.ts +1 -0
- package/dist/utils/claims-helpers-diagnostic-report.js +1 -0
- package/dist/utils/claims-helpers-document-reference.d.ts +1 -0
- package/dist/utils/claims-helpers-document-reference.js +1 -0
- package/dist/utils/claims-helpers-encounter.d.ts +1 -0
- package/dist/utils/claims-helpers-encounter.js +1 -0
- package/dist/utils/claims-helpers-flag.d.ts +1 -0
- package/dist/utils/claims-helpers-flag.js +1 -0
- package/dist/utils/claims-helpers-immunization.d.ts +1 -0
- package/dist/utils/claims-helpers-immunization.js +1 -0
- package/dist/utils/claims-helpers-location.d.ts +1 -0
- package/dist/utils/claims-helpers-location.js +1 -0
- package/dist/utils/claims-helpers-medication-statement.d.ts +1 -0
- package/dist/utils/claims-helpers-medication-statement.js +1 -0
- package/dist/utils/claims-helpers-observation.d.ts +1 -0
- package/dist/utils/claims-helpers-observation.js +1 -0
- package/dist/utils/claims-helpers-organization.d.ts +1 -0
- package/dist/utils/claims-helpers-organization.js +1 -0
- package/dist/utils/claims-helpers-procedure.d.ts +1 -0
- package/dist/utils/claims-helpers-procedure.js +1 -0
- package/dist/utils/claims-helpers-related-person.d.ts +1 -0
- package/dist/utils/claims-helpers-related-person.js +1 -0
- package/dist/utils/clinical-impression-claim-helpers.d.ts +10 -0
- package/dist/utils/clinical-impression-claim-helpers.js +26 -0
- package/dist/utils/clinical-resource-converters.d.ts +91 -62
- package/dist/utils/clinical-resource-converters.js +135 -273
- package/dist/utils/communication-bundle-document-request.d.ts +6 -4
- package/dist/utils/communication-bundle-document-request.js +7 -5
- package/dist/utils/communication-bundle-session.js +1 -1
- package/dist/utils/composition-claim-helpers.d.ts +12 -0
- package/dist/utils/composition-claim-helpers.js +32 -0
- package/dist/utils/consent-claim-helpers.d.ts +2 -2
- package/dist/utils/consent-claim-helpers.js +2 -2
- package/dist/utils/convert-allergy-intolerance.d.ts +3 -0
- package/dist/utils/convert-allergy-intolerance.js +34 -0
- package/dist/utils/convert-appointment-response.d.ts +3 -0
- package/dist/utils/convert-appointment-response.js +32 -0
- package/dist/utils/convert-appointment.d.ts +3 -0
- package/dist/utils/convert-appointment.js +61 -0
- package/dist/utils/convert-care-plan.d.ts +3 -0
- package/dist/utils/convert-care-plan.js +58 -0
- package/dist/utils/convert-clinical-impression.d.ts +3 -0
- package/dist/utils/convert-clinical-impression.js +42 -0
- package/dist/utils/convert-composition.d.ts +3 -0
- package/dist/utils/convert-composition.js +35 -0
- package/dist/utils/convert-condition.d.ts +3 -0
- package/dist/utils/convert-condition.js +24 -0
- package/dist/utils/convert-coverage.d.ts +3 -0
- package/dist/utils/convert-coverage.js +51 -0
- package/dist/utils/convert-device-use-statement.d.ts +3 -0
- package/dist/utils/convert-device-use-statement.js +28 -0
- package/dist/utils/convert-device.d.ts +3 -0
- package/dist/utils/convert-device.js +37 -0
- package/dist/utils/convert-diagnostic-report.d.ts +3 -0
- package/dist/utils/convert-diagnostic-report.js +55 -0
- package/dist/utils/convert-document-reference.d.ts +3 -0
- package/dist/utils/convert-document-reference.js +35 -0
- package/dist/utils/convert-encounter.d.ts +3 -0
- package/dist/utils/convert-encounter.js +68 -0
- package/dist/utils/convert-flag.d.ts +3 -0
- package/dist/utils/convert-flag.js +34 -0
- package/dist/utils/convert-immunization.d.ts +3 -0
- package/dist/utils/convert-immunization.js +56 -0
- package/dist/utils/convert-medication-statement.d.ts +3 -0
- package/dist/utils/convert-medication-statement.js +64 -0
- package/dist/utils/convert-observation.d.ts +3 -0
- package/dist/utils/convert-observation.js +57 -0
- package/dist/utils/convert-procedure.d.ts +3 -0
- package/dist/utils/convert-procedure.js +50 -0
- package/dist/utils/convert-related-person.d.ts +3 -0
- package/dist/utils/convert-related-person.js +31 -0
- package/dist/utils/convert-shared.d.ts +34 -0
- package/dist/utils/convert-shared.js +179 -0
- package/dist/utils/coverage-claim-helpers.d.ts +10 -0
- package/dist/utils/coverage-claim-helpers.js +26 -0
- package/dist/utils/diagnostic-report-claim-helpers.d.ts +12 -0
- package/dist/utils/diagnostic-report-claim-helpers.js +32 -0
- package/dist/utils/encounter-claim-helpers.d.ts +10 -0
- package/dist/utils/encounter-claim-helpers.js +26 -0
- package/dist/utils/fhir-cid.d.ts +49 -0
- package/dist/utils/fhir-cid.js +75 -0
- package/dist/utils/index.d.ts +4 -6
- package/dist/utils/index.js +4 -6
- package/dist/utils/ips-bundle-claims.d.ts +52 -0
- package/dist/utils/ips-bundle-claims.js +104 -0
- package/dist/utils/jwt.d.ts +16 -0
- package/dist/utils/jwt.js +21 -0
- package/dist/utils/related-person-claim-helpers.d.ts +8 -0
- package/dist/utils/related-person-claim-helpers.js +20 -0
- package/package.json +17 -1
|
@@ -8,19 +8,27 @@ export declare const ResourceTypesFhirR4: Readonly<{
|
|
|
8
8
|
readonly AdverseEvent: "AdverseEvent";
|
|
9
9
|
readonly AllergyIntolerance: "AllergyIntolerance";
|
|
10
10
|
readonly Appointment: "Appointment";
|
|
11
|
+
readonly AppointmentResponse: "AppointmentResponse";
|
|
11
12
|
readonly Bundle: "Bundle";
|
|
12
13
|
readonly CarePlan: "CarePlan";
|
|
14
|
+
readonly ClinicalImpression: "ClinicalImpression";
|
|
13
15
|
readonly Communication: "Communication";
|
|
14
16
|
readonly Composition: "Composition";
|
|
15
17
|
readonly Condition: "Condition";
|
|
16
18
|
readonly Consent: "Consent";
|
|
19
|
+
readonly Coverage: "Coverage";
|
|
20
|
+
readonly Device: "Device";
|
|
21
|
+
readonly DeviceUseStatement: "DeviceUseStatement";
|
|
17
22
|
readonly DiagnosticReport: "DiagnosticReport";
|
|
18
23
|
readonly DocumentReference: "DocumentReference";
|
|
19
24
|
readonly Encounter: "Encounter";
|
|
25
|
+
readonly Flag: "Flag";
|
|
20
26
|
readonly ImagingStudy: "ImagingStudy";
|
|
21
27
|
readonly Immunization: "Immunization";
|
|
28
|
+
readonly Location: "Location";
|
|
22
29
|
readonly MedicationStatement: "MedicationStatement";
|
|
23
30
|
readonly Observation: "Observation";
|
|
31
|
+
readonly Organization: "Organization";
|
|
24
32
|
readonly Procedure: "Procedure";
|
|
25
33
|
readonly RelatedPerson: "RelatedPerson";
|
|
26
34
|
}>;
|
|
@@ -34,19 +42,27 @@ export declare const FhirResourceTypes: Readonly<{
|
|
|
34
42
|
readonly AdverseEvent: "AdverseEvent";
|
|
35
43
|
readonly AllergyIntolerance: "AllergyIntolerance";
|
|
36
44
|
readonly Appointment: "Appointment";
|
|
45
|
+
readonly AppointmentResponse: "AppointmentResponse";
|
|
37
46
|
readonly Bundle: "Bundle";
|
|
38
47
|
readonly CarePlan: "CarePlan";
|
|
48
|
+
readonly ClinicalImpression: "ClinicalImpression";
|
|
39
49
|
readonly Communication: "Communication";
|
|
40
50
|
readonly Composition: "Composition";
|
|
41
51
|
readonly Condition: "Condition";
|
|
42
52
|
readonly Consent: "Consent";
|
|
53
|
+
readonly Coverage: "Coverage";
|
|
54
|
+
readonly Device: "Device";
|
|
55
|
+
readonly DeviceUseStatement: "DeviceUseStatement";
|
|
43
56
|
readonly DiagnosticReport: "DiagnosticReport";
|
|
44
57
|
readonly DocumentReference: "DocumentReference";
|
|
45
58
|
readonly Encounter: "Encounter";
|
|
59
|
+
readonly Flag: "Flag";
|
|
46
60
|
readonly ImagingStudy: "ImagingStudy";
|
|
47
61
|
readonly Immunization: "Immunization";
|
|
62
|
+
readonly Location: "Location";
|
|
48
63
|
readonly MedicationStatement: "MedicationStatement";
|
|
49
64
|
readonly Observation: "Observation";
|
|
65
|
+
readonly Organization: "Organization";
|
|
50
66
|
readonly Procedure: "Procedure";
|
|
51
67
|
readonly RelatedPerson: "RelatedPerson";
|
|
52
68
|
}>;
|
|
@@ -8,19 +8,27 @@ export const ResourceTypesFhirR4 = Object.freeze({
|
|
|
8
8
|
AdverseEvent: 'AdverseEvent',
|
|
9
9
|
AllergyIntolerance: 'AllergyIntolerance',
|
|
10
10
|
Appointment: 'Appointment',
|
|
11
|
+
AppointmentResponse: 'AppointmentResponse',
|
|
11
12
|
Bundle: 'Bundle',
|
|
12
13
|
CarePlan: 'CarePlan',
|
|
14
|
+
ClinicalImpression: 'ClinicalImpression',
|
|
13
15
|
Communication: 'Communication',
|
|
14
16
|
Composition: 'Composition',
|
|
15
17
|
Condition: 'Condition',
|
|
16
18
|
Consent: 'Consent',
|
|
19
|
+
Coverage: 'Coverage',
|
|
20
|
+
Device: 'Device',
|
|
21
|
+
DeviceUseStatement: 'DeviceUseStatement',
|
|
17
22
|
DiagnosticReport: 'DiagnosticReport',
|
|
18
23
|
DocumentReference: 'DocumentReference',
|
|
19
24
|
Encounter: 'Encounter',
|
|
25
|
+
Flag: 'Flag',
|
|
20
26
|
ImagingStudy: 'ImagingStudy',
|
|
21
27
|
Immunization: 'Immunization',
|
|
28
|
+
Location: 'Location',
|
|
22
29
|
MedicationStatement: 'MedicationStatement',
|
|
23
30
|
Observation: 'Observation',
|
|
31
|
+
Organization: 'Organization',
|
|
24
32
|
Procedure: 'Procedure',
|
|
25
33
|
RelatedPerson: 'RelatedPerson',
|
|
26
34
|
});
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
// Copyright 2026 Conéctate Soluciones y Aplicaciones SL under the Apache License, Version 2.0.
|
|
2
|
+
// File: src/utils/convert-allergy-intolerance.ts
|
|
3
|
+
import { AllergyIntoleranceClaim } from '../models/interoperable-claims/allergy-intolerance-claims.js';
|
|
4
|
+
import { codingFromValue, codingToValue, requireDidWeb, requireSubjectIdentifier } from './convert-shared.js';
|
|
5
|
+
export function allergyIntoleranceFlatToFhirR4(claims) {
|
|
6
|
+
const patient = claims[AllergyIntoleranceClaim.Subject] ?? claims[AllergyIntoleranceClaim.Patient];
|
|
7
|
+
const recorder = claims[AllergyIntoleranceClaim.Recorder];
|
|
8
|
+
if (!patient)
|
|
9
|
+
throw new Error(`Missing required claim: ${AllergyIntoleranceClaim.Subject}`);
|
|
10
|
+
requireSubjectIdentifier(patient, AllergyIntoleranceClaim.Subject);
|
|
11
|
+
if (recorder)
|
|
12
|
+
requireDidWeb(recorder, AllergyIntoleranceClaim.Recorder);
|
|
13
|
+
return {
|
|
14
|
+
resourceType: 'AllergyIntolerance',
|
|
15
|
+
identifier: claims[AllergyIntoleranceClaim.Identifier] ? [{ value: claims[AllergyIntoleranceClaim.Identifier] }] : undefined,
|
|
16
|
+
patient: { reference: patient },
|
|
17
|
+
code: claims[AllergyIntoleranceClaim.Code] ? { coding: codingFromValue(claims[AllergyIntoleranceClaim.Code]) } : undefined,
|
|
18
|
+
clinicalStatus: claims[AllergyIntoleranceClaim.ClinicalStatus] ? { coding: [{ code: claims[AllergyIntoleranceClaim.ClinicalStatus] }] } : undefined,
|
|
19
|
+
verificationStatus: claims[AllergyIntoleranceClaim.VerificationStatus] ? { coding: [{ code: claims[AllergyIntoleranceClaim.VerificationStatus] }] } : undefined,
|
|
20
|
+
recorder: recorder ? { reference: recorder } : undefined,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
export function allergyIntoleranceFhirR4ToFlat(resource) {
|
|
24
|
+
const subject = resource.patient?.reference;
|
|
25
|
+
return {
|
|
26
|
+
[AllergyIntoleranceClaim.Identifier]: resource.identifier?.[0]?.value,
|
|
27
|
+
[AllergyIntoleranceClaim.Subject]: subject,
|
|
28
|
+
[AllergyIntoleranceClaim.Patient]: subject,
|
|
29
|
+
[AllergyIntoleranceClaim.Code]: codingToValue(resource.code?.coding?.[0]),
|
|
30
|
+
[AllergyIntoleranceClaim.ClinicalStatus]: resource.clinicalStatus?.coding?.[0]?.code,
|
|
31
|
+
[AllergyIntoleranceClaim.VerificationStatus]: resource.verificationStatus?.coding?.[0]?.code,
|
|
32
|
+
[AllergyIntoleranceClaim.Recorder]: resource.recorder?.reference,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
// Copyright 2026 Conéctate Soluciones y Aplicaciones SL under the Apache License, Version 2.0.
|
|
2
|
+
// File: src/utils/convert-appointment-response.ts
|
|
3
|
+
import { AppointmentResponseClaim } from '../models/interoperable-claims/appointment-response-claims.js';
|
|
4
|
+
import { codingFromValue, codingToValue, referenceToValue } from './convert-shared.js';
|
|
5
|
+
export function appointmentResponseFlatToFhirR4(claims) {
|
|
6
|
+
return {
|
|
7
|
+
resourceType: 'AppointmentResponse',
|
|
8
|
+
identifier: claims[AppointmentResponseClaim.Identifier] ? [{ value: claims[AppointmentResponseClaim.Identifier] }] : undefined,
|
|
9
|
+
appointment: claims[AppointmentResponseClaim.Appointment] ? { reference: claims[AppointmentResponseClaim.Appointment] } : undefined,
|
|
10
|
+
actor: claims[AppointmentResponseClaim.Actor] ? { reference: claims[AppointmentResponseClaim.Actor] } : undefined,
|
|
11
|
+
participantStatus: claims[AppointmentResponseClaim.ParticipantStatus],
|
|
12
|
+
participantType: claims[AppointmentResponseClaim.ParticipantType] ? [{ coding: codingFromValue(claims[AppointmentResponseClaim.ParticipantType]) }] : undefined,
|
|
13
|
+
start: claims[AppointmentResponseClaim.Start],
|
|
14
|
+
end: claims[AppointmentResponseClaim.End],
|
|
15
|
+
comment: claims[AppointmentResponseClaim.Comment],
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
export function appointmentResponseFhirR4ToFlat(resource) {
|
|
19
|
+
return {
|
|
20
|
+
[AppointmentResponseClaim.Actor]: referenceToValue(resource.actor),
|
|
21
|
+
[AppointmentResponseClaim.Appointment]: referenceToValue(resource.appointment),
|
|
22
|
+
[AppointmentResponseClaim.Comment]: resource.comment,
|
|
23
|
+
[AppointmentResponseClaim.Identifier]: resource.identifier?.[0]?.value,
|
|
24
|
+
[AppointmentResponseClaim.Start]: resource.start,
|
|
25
|
+
[AppointmentResponseClaim.End]: resource.end,
|
|
26
|
+
[AppointmentResponseClaim.ParticipantType]: codingToValue(resource.participantType?.[0]?.coding?.[0]),
|
|
27
|
+
[AppointmentResponseClaim.ParticipantStatus]: resource.participantStatus,
|
|
28
|
+
[AppointmentResponseClaim.Patient]: undefined,
|
|
29
|
+
[AppointmentResponseClaim.Practitioner]: undefined,
|
|
30
|
+
[AppointmentResponseClaim.Location]: undefined,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
// Copyright 2026 Conéctate Soluciones y Aplicaciones SL under the Apache License, Version 2.0.
|
|
2
|
+
// File: src/utils/convert-appointment.ts
|
|
3
|
+
import { AppointmentClaim } from '../models/interoperable-claims/appointment-claims.js';
|
|
4
|
+
import { codingFromValue, codingToValue, referenceListToCsv, referenceToValue } from './convert-shared.js';
|
|
5
|
+
export function appointmentFlatToFhirR4(claims) {
|
|
6
|
+
return {
|
|
7
|
+
resourceType: 'Appointment',
|
|
8
|
+
identifier: claims[AppointmentClaim.Identifier] ? [{ value: claims[AppointmentClaim.Identifier] }] : undefined,
|
|
9
|
+
status: claims[AppointmentClaim.Status],
|
|
10
|
+
serviceCategory: claims[AppointmentClaim.ServiceCategory] ? [{ coding: codingFromValue(claims[AppointmentClaim.ServiceCategory]) }] : undefined,
|
|
11
|
+
serviceType: claims[AppointmentClaim.ServiceType] ? [{ coding: codingFromValue(claims[AppointmentClaim.ServiceType]) }] : undefined,
|
|
12
|
+
specialty: claims[AppointmentClaim.Specialty] ? [{ coding: codingFromValue(claims[AppointmentClaim.Specialty]) }] : undefined,
|
|
13
|
+
appointmentType: claims[AppointmentClaim.AppointmentType] ? { coding: codingFromValue(claims[AppointmentClaim.AppointmentType]) } : undefined,
|
|
14
|
+
reasonCode: claims[AppointmentClaim.ReasonCode] ? [{ coding: codingFromValue(claims[AppointmentClaim.ReasonCode]) }] : undefined,
|
|
15
|
+
reasonReference: claims[AppointmentClaim.ReasonReference] ? claims[AppointmentClaim.ReasonReference].split(',').map((reference) => ({ reference: reference.trim() })) : undefined,
|
|
16
|
+
description: claims[AppointmentClaim.Description],
|
|
17
|
+
start: claims[AppointmentClaim.Start],
|
|
18
|
+
end: claims[AppointmentClaim.End],
|
|
19
|
+
minutesDuration: claims[AppointmentClaim.MinutesDuration] ? Number(claims[AppointmentClaim.MinutesDuration]) : undefined,
|
|
20
|
+
created: claims[AppointmentClaim.Created],
|
|
21
|
+
note: claims[AppointmentClaim.NoteText] ? [{ text: claims[AppointmentClaim.NoteText] }] : undefined,
|
|
22
|
+
patientInstruction: claims[AppointmentClaim.PatientInstruction],
|
|
23
|
+
basedOn: claims[AppointmentClaim.BasedOn] ? claims[AppointmentClaim.BasedOn].split(',').map((reference) => ({ reference: reference.trim() })) : undefined,
|
|
24
|
+
participant: claims[AppointmentClaim.ParticipantActor]
|
|
25
|
+
? claims[AppointmentClaim.ParticipantActor].split(',').map((reference) => ({
|
|
26
|
+
actor: { reference: reference.trim() },
|
|
27
|
+
status: claims[AppointmentClaim.ParticipantStatus],
|
|
28
|
+
type: claims[AppointmentClaim.ParticipantType] ? [{ coding: codingFromValue(claims[AppointmentClaim.ParticipantType]) }] : undefined,
|
|
29
|
+
}))
|
|
30
|
+
: undefined,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
export function appointmentFhirR4ToFlat(resource) {
|
|
34
|
+
const participant = Array.isArray(resource.participant) ? resource.participant[0] : undefined;
|
|
35
|
+
return {
|
|
36
|
+
[AppointmentClaim.Identifier]: resource.identifier?.[0]?.value,
|
|
37
|
+
[AppointmentClaim.Status]: resource.status,
|
|
38
|
+
[AppointmentClaim.ServiceCategory]: codingToValue(resource.serviceCategory?.[0]?.coding?.[0]),
|
|
39
|
+
[AppointmentClaim.ServiceType]: codingToValue(resource.serviceType?.[0]?.coding?.[0]),
|
|
40
|
+
[AppointmentClaim.Specialty]: codingToValue(resource.specialty?.[0]?.coding?.[0]),
|
|
41
|
+
[AppointmentClaim.AppointmentType]: codingToValue(resource.appointmentType?.coding?.[0]),
|
|
42
|
+
[AppointmentClaim.ReasonCode]: codingToValue(resource.reasonCode?.[0]?.coding?.[0]),
|
|
43
|
+
[AppointmentClaim.ReasonReference]: referenceListToCsv(resource.reasonReference),
|
|
44
|
+
[AppointmentClaim.Description]: resource.description,
|
|
45
|
+
[AppointmentClaim.Start]: resource.start,
|
|
46
|
+
[AppointmentClaim.End]: resource.end,
|
|
47
|
+
[AppointmentClaim.MinutesDuration]: resource.minutesDuration === undefined ? undefined : String(resource.minutesDuration),
|
|
48
|
+
[AppointmentClaim.Created]: resource.created,
|
|
49
|
+
[AppointmentClaim.NoteText]: resource.note?.[0]?.text,
|
|
50
|
+
[AppointmentClaim.PatientInstruction]: resource.patientInstruction,
|
|
51
|
+
[AppointmentClaim.BasedOn]: referenceListToCsv(resource.basedOn),
|
|
52
|
+
[AppointmentClaim.ParticipantActor]: Array.isArray(resource.participant)
|
|
53
|
+
? resource.participant
|
|
54
|
+
.map((item) => referenceToValue(item?.actor))
|
|
55
|
+
.filter((item) => Boolean(item))
|
|
56
|
+
.join(',')
|
|
57
|
+
: undefined,
|
|
58
|
+
[AppointmentClaim.ParticipantStatus]: participant?.status,
|
|
59
|
+
[AppointmentClaim.ParticipantType]: codingToValue(participant?.type?.[0]?.coding?.[0]),
|
|
60
|
+
};
|
|
61
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
// Copyright 2026 Conéctate Soluciones y Aplicaciones SL under the Apache License, Version 2.0.
|
|
2
|
+
// File: src/utils/convert-care-plan.ts
|
|
3
|
+
import { CarePlanClaim } from '../models/interoperable-claims/care-plan-claims.js';
|
|
4
|
+
import { codingFromValue, codingToValue, referenceListToCsv, referenceToValue } from './convert-shared.js';
|
|
5
|
+
export function carePlanFlatToFhirR4(claims) {
|
|
6
|
+
const subject = claims[CarePlanClaim.Subject] ?? claims[CarePlanClaim.Patient];
|
|
7
|
+
return {
|
|
8
|
+
resourceType: 'CarePlan',
|
|
9
|
+
identifier: claims[CarePlanClaim.Identifier] ? [{ value: claims[CarePlanClaim.Identifier] }] : undefined,
|
|
10
|
+
status: claims[CarePlanClaim.Status],
|
|
11
|
+
intent: claims[CarePlanClaim.Intent],
|
|
12
|
+
subject: subject ? { reference: subject } : undefined,
|
|
13
|
+
category: claims[CarePlanClaim.Category] ? [{ coding: codingFromValue(claims[CarePlanClaim.Category]) }] : undefined,
|
|
14
|
+
created: claims[CarePlanClaim.Date],
|
|
15
|
+
note: claims[CarePlanClaim.Note] ? [{ text: claims[CarePlanClaim.Note] }] : undefined,
|
|
16
|
+
basedOn: claims[CarePlanClaim.BasedOn] ? claims[CarePlanClaim.BasedOn].split(',').map((reference) => ({ reference: reference.trim() })) : undefined,
|
|
17
|
+
careTeam: claims[CarePlanClaim.CareTeam] ? claims[CarePlanClaim.CareTeam].split(',').map((reference) => ({ reference: reference.trim() })) : undefined,
|
|
18
|
+
addresses: claims[CarePlanClaim.Condition] ? claims[CarePlanClaim.Condition].split(',').map((reference) => ({ reference: reference.trim() })) : undefined,
|
|
19
|
+
encounter: claims[CarePlanClaim.Encounter] ? { reference: claims[CarePlanClaim.Encounter] } : undefined,
|
|
20
|
+
goal: claims[CarePlanClaim.Goal] ? claims[CarePlanClaim.Goal].split(',').map((reference) => ({ reference: reference.trim() })) : undefined,
|
|
21
|
+
partOf: claims[CarePlanClaim.PartOf] ? claims[CarePlanClaim.PartOf].split(',').map((reference) => ({ reference: reference.trim() })) : undefined,
|
|
22
|
+
replaces: claims[CarePlanClaim.Replaces] ? claims[CarePlanClaim.Replaces].split(',').map((reference) => ({ reference: reference.trim() })) : undefined,
|
|
23
|
+
activity: (claims[CarePlanClaim.ActivityCode] || claims[CarePlanClaim.ActivityDate] || claims[CarePlanClaim.ActivityReference] || claims[CarePlanClaim.Performer]) ? [{
|
|
24
|
+
reference: claims[CarePlanClaim.ActivityReference] ? { reference: claims[CarePlanClaim.ActivityReference] } : undefined,
|
|
25
|
+
detail: {
|
|
26
|
+
code: claims[CarePlanClaim.ActivityCode] ? { coding: codingFromValue(claims[CarePlanClaim.ActivityCode]) } : undefined,
|
|
27
|
+
scheduledString: claims[CarePlanClaim.ActivityDate],
|
|
28
|
+
performer: claims[CarePlanClaim.Performer] ? claims[CarePlanClaim.Performer].split(',').map((reference) => ({ reference: reference.trim() })) : undefined,
|
|
29
|
+
},
|
|
30
|
+
}] : undefined,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
export function carePlanFhirR4ToFlat(resource) {
|
|
34
|
+
const activity = Array.isArray(resource.activity) ? resource.activity[0] : undefined;
|
|
35
|
+
const detail = activity?.detail;
|
|
36
|
+
const period = resource.period;
|
|
37
|
+
return {
|
|
38
|
+
[CarePlanClaim.ActivityCode]: codingToValue(detail?.code?.coding?.[0]),
|
|
39
|
+
[CarePlanClaim.ActivityDate]: detail?.scheduledString,
|
|
40
|
+
[CarePlanClaim.ActivityReference]: referenceToValue(activity?.reference),
|
|
41
|
+
[CarePlanClaim.BasedOn]: referenceListToCsv(resource.basedOn),
|
|
42
|
+
[CarePlanClaim.CareTeam]: referenceListToCsv(resource.careTeam),
|
|
43
|
+
[CarePlanClaim.Category]: codingToValue(resource.category?.[0]?.coding?.[0]),
|
|
44
|
+
[CarePlanClaim.Condition]: referenceListToCsv(resource.addresses),
|
|
45
|
+
[CarePlanClaim.Date]: resource.created || period?.start,
|
|
46
|
+
[CarePlanClaim.Encounter]: referenceToValue(resource.encounter),
|
|
47
|
+
[CarePlanClaim.Goal]: referenceListToCsv(resource.goal),
|
|
48
|
+
[CarePlanClaim.Identifier]: resource.identifier?.[0]?.value,
|
|
49
|
+
[CarePlanClaim.Intent]: resource.intent,
|
|
50
|
+
[CarePlanClaim.PartOf]: referenceListToCsv(resource.partOf),
|
|
51
|
+
[CarePlanClaim.Patient]: referenceToValue(resource.subject),
|
|
52
|
+
[CarePlanClaim.Performer]: referenceListToCsv(detail?.performer),
|
|
53
|
+
[CarePlanClaim.Replaces]: referenceListToCsv(resource.replaces),
|
|
54
|
+
[CarePlanClaim.Status]: resource.status,
|
|
55
|
+
[CarePlanClaim.Subject]: referenceToValue(resource.subject),
|
|
56
|
+
[CarePlanClaim.Note]: resource.note?.[0]?.text,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
// Copyright 2026 Conéctate Soluciones y Aplicaciones SL under the Apache License, Version 2.0.
|
|
2
|
+
// File: src/utils/convert-clinical-impression.ts
|
|
3
|
+
import { ClinicalImpressionClaim } from '../models/interoperable-claims/clinical-impression-claims.js';
|
|
4
|
+
import { codingFromValue, codingToValue, referenceListToCsv, referenceToValue } from './convert-shared.js';
|
|
5
|
+
export function clinicalImpressionFlatToFhirR4(claims) {
|
|
6
|
+
return {
|
|
7
|
+
resourceType: 'ClinicalImpression',
|
|
8
|
+
identifier: claims[ClinicalImpressionClaim.Identifier] ? [{ value: claims[ClinicalImpressionClaim.Identifier] }] : undefined,
|
|
9
|
+
status: claims[ClinicalImpressionClaim.Status],
|
|
10
|
+
description: claims[ClinicalImpressionClaim.Description],
|
|
11
|
+
subject: claims[ClinicalImpressionClaim.Subject] ? { reference: claims[ClinicalImpressionClaim.Subject] } : undefined,
|
|
12
|
+
encounter: claims[ClinicalImpressionClaim.Encounter] ? { reference: claims[ClinicalImpressionClaim.Encounter] } : undefined,
|
|
13
|
+
effectiveDateTime: claims[ClinicalImpressionClaim.EffectiveDateTime],
|
|
14
|
+
date: claims[ClinicalImpressionClaim.Date],
|
|
15
|
+
assessor: claims[ClinicalImpressionClaim.Assessor] ? { reference: claims[ClinicalImpressionClaim.Assessor] } : undefined,
|
|
16
|
+
problem: claims[ClinicalImpressionClaim.Problem] ? claims[ClinicalImpressionClaim.Problem].split(',').map((reference) => ({ reference: reference.trim() })) : undefined,
|
|
17
|
+
finding: claims[ClinicalImpressionClaim.Finding] ? claims[ClinicalImpressionClaim.Finding].split(',').map((reference) => ({ itemReference: { reference: reference.trim() } })) : undefined,
|
|
18
|
+
prognosisCodeableConcept: claims[ClinicalImpressionClaim.PrognosisCode] ? [{ coding: codingFromValue(claims[ClinicalImpressionClaim.PrognosisCode]) }] : undefined,
|
|
19
|
+
summary: claims[ClinicalImpressionClaim.Summary],
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
export function clinicalImpressionFhirR4ToFlat(resource) {
|
|
23
|
+
return {
|
|
24
|
+
[ClinicalImpressionClaim.Identifier]: resource.identifier?.[0]?.value,
|
|
25
|
+
[ClinicalImpressionClaim.Status]: resource.status,
|
|
26
|
+
[ClinicalImpressionClaim.Description]: resource.description,
|
|
27
|
+
[ClinicalImpressionClaim.Subject]: referenceToValue(resource.subject),
|
|
28
|
+
[ClinicalImpressionClaim.Encounter]: referenceToValue(resource.encounter),
|
|
29
|
+
[ClinicalImpressionClaim.EffectiveDateTime]: resource.effectiveDateTime,
|
|
30
|
+
[ClinicalImpressionClaim.Date]: resource.date,
|
|
31
|
+
[ClinicalImpressionClaim.Assessor]: referenceToValue(resource.assessor),
|
|
32
|
+
[ClinicalImpressionClaim.Problem]: referenceListToCsv(resource.problem),
|
|
33
|
+
[ClinicalImpressionClaim.Finding]: Array.isArray(resource.finding)
|
|
34
|
+
? resource.finding
|
|
35
|
+
.map((item) => referenceToValue(item?.itemReference))
|
|
36
|
+
.filter((item) => Boolean(item))
|
|
37
|
+
.join(',')
|
|
38
|
+
: undefined,
|
|
39
|
+
[ClinicalImpressionClaim.PrognosisCode]: codingToValue(resource.prognosisCodeableConcept?.[0]?.coding?.[0]),
|
|
40
|
+
[ClinicalImpressionClaim.Summary]: resource.summary,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
// Copyright 2026 Conéctate Soluciones y Aplicaciones SL under the Apache License, Version 2.0.
|
|
2
|
+
// File: src/utils/convert-composition.ts
|
|
3
|
+
import { CompositionClaim } from '../models/interoperable-claims/composition-claims.js';
|
|
4
|
+
import { codingFromValue, codingToValue, referenceListToCsv, referenceToValue } from './convert-shared.js';
|
|
5
|
+
export function compositionFlatToFhirR4(claims) {
|
|
6
|
+
return {
|
|
7
|
+
resourceType: 'Composition',
|
|
8
|
+
identifier: claims[CompositionClaim.Identifier] ? { value: claims[CompositionClaim.Identifier] } : undefined,
|
|
9
|
+
subject: claims[CompositionClaim.Subject] ? { reference: claims[CompositionClaim.Subject] } : undefined,
|
|
10
|
+
author: claims[CompositionClaim.Author] ? claims[CompositionClaim.Author].split(',').map((reference) => ({ reference: reference.trim() })) : undefined,
|
|
11
|
+
date: claims[CompositionClaim.Date],
|
|
12
|
+
title: claims[CompositionClaim.Title],
|
|
13
|
+
type: claims[CompositionClaim.Type] ? { coding: codingFromValue(claims[CompositionClaim.Type]) } : undefined,
|
|
14
|
+
section: claims[CompositionClaim.Section]
|
|
15
|
+
? claims[CompositionClaim.Section].split(',').map((value) => ({ code: { coding: codingFromValue(value.trim()) } }))
|
|
16
|
+
: undefined,
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
export function compositionFhirR4ToFlat(resource) {
|
|
20
|
+
const sectionValues = Array.isArray(resource.section)
|
|
21
|
+
? resource.section
|
|
22
|
+
.map((item) => codingToValue(item?.code?.coding?.[0]))
|
|
23
|
+
.filter((item) => Boolean(item))
|
|
24
|
+
: [];
|
|
25
|
+
return {
|
|
26
|
+
[CompositionClaim.Subject]: referenceToValue(resource.subject),
|
|
27
|
+
[CompositionClaim.Section]: sectionValues.length ? sectionValues.join(',') : undefined,
|
|
28
|
+
[CompositionClaim.Author]: referenceListToCsv(resource.author),
|
|
29
|
+
[CompositionClaim.Date]: resource.date,
|
|
30
|
+
[CompositionClaim.Entry]: undefined,
|
|
31
|
+
[CompositionClaim.Type]: codingToValue(resource.type?.coding?.[0]),
|
|
32
|
+
[CompositionClaim.Identifier]: resource.identifier?.value,
|
|
33
|
+
[CompositionClaim.Title]: resource.title,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// Copyright 2026 Conéctate Soluciones y Aplicaciones SL under the Apache License, Version 2.0.
|
|
2
|
+
// File: src/utils/convert-condition.ts
|
|
3
|
+
import { ConditionClaim } from '../models/interoperable-claims/condition-claims.js';
|
|
4
|
+
import { codingFromValue, codingToValue, requireClaim } from './convert-shared.js';
|
|
5
|
+
export function conditionFlatToFhirR4(claims) {
|
|
6
|
+
const subject = requireClaim(claims, ConditionClaim.Subject);
|
|
7
|
+
return {
|
|
8
|
+
resourceType: 'Condition',
|
|
9
|
+
identifier: claims[ConditionClaim.Identifier] ? [{ value: claims[ConditionClaim.Identifier] }] : undefined,
|
|
10
|
+
subject: { reference: subject },
|
|
11
|
+
code: claims[ConditionClaim.Code] ? { coding: codingFromValue(claims[ConditionClaim.Code]) } : undefined,
|
|
12
|
+
clinicalStatus: claims[ConditionClaim.ClinicalStatus] ? { coding: [{ code: claims[ConditionClaim.ClinicalStatus] }] } : undefined,
|
|
13
|
+
verificationStatus: claims[ConditionClaim.VerificationStatus] ? { coding: [{ code: claims[ConditionClaim.VerificationStatus] }] } : undefined,
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
export function conditionFhirR4ToFlat(resource) {
|
|
17
|
+
return {
|
|
18
|
+
[ConditionClaim.Identifier]: resource.identifier?.[0]?.value,
|
|
19
|
+
[ConditionClaim.Subject]: resource.subject?.reference,
|
|
20
|
+
[ConditionClaim.Code]: codingToValue(resource.code?.coding?.[0]),
|
|
21
|
+
[ConditionClaim.ClinicalStatus]: resource.clinicalStatus?.coding?.[0]?.code,
|
|
22
|
+
[ConditionClaim.VerificationStatus]: resource.verificationStatus?.coding?.[0]?.code,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
// Copyright 2026 Conéctate Soluciones y Aplicaciones SL under the Apache License, Version 2.0.
|
|
2
|
+
// File: src/utils/convert-coverage.ts
|
|
3
|
+
import { CoverageClaim } from '../models/interoperable-claims/coverage-claims.js';
|
|
4
|
+
import { codingFromValue, codingToValue, referenceListToCsv, referenceToValue } from './convert-shared.js';
|
|
5
|
+
export function coverageFlatToFhirR4(claims) {
|
|
6
|
+
return {
|
|
7
|
+
resourceType: 'Coverage',
|
|
8
|
+
identifier: claims[CoverageClaim.Identifier] ? [{ value: claims[CoverageClaim.Identifier] }] : undefined,
|
|
9
|
+
status: claims[CoverageClaim.Status],
|
|
10
|
+
type: claims[CoverageClaim.Type] ? { coding: codingFromValue(claims[CoverageClaim.Type]) } : undefined,
|
|
11
|
+
policyHolder: claims[CoverageClaim.PolicyHolder] ? { reference: claims[CoverageClaim.PolicyHolder] } : undefined,
|
|
12
|
+
subscriber: claims[CoverageClaim.Subscriber] ? { reference: claims[CoverageClaim.Subscriber] } : undefined,
|
|
13
|
+
beneficiary: claims[CoverageClaim.Beneficiary] ? { reference: claims[CoverageClaim.Beneficiary] } : undefined,
|
|
14
|
+
relationship: claims[CoverageClaim.Relationship] ? { coding: codingFromValue(claims[CoverageClaim.Relationship]) } : undefined,
|
|
15
|
+
period: (claims[CoverageClaim.PeriodStart] || claims[CoverageClaim.PeriodEnd]) ? {
|
|
16
|
+
start: claims[CoverageClaim.PeriodStart],
|
|
17
|
+
end: claims[CoverageClaim.PeriodEnd],
|
|
18
|
+
} : undefined,
|
|
19
|
+
payor: claims[CoverageClaim.Payor] ? claims[CoverageClaim.Payor].split(',').map((reference) => ({ reference: reference.trim() })) : undefined,
|
|
20
|
+
class: claims[CoverageClaim.Class]
|
|
21
|
+
? claims[CoverageClaim.Class].split(',').map((value) => {
|
|
22
|
+
const [type, val] = value.trim().split('|');
|
|
23
|
+
return { type: { text: type }, value: val ?? type };
|
|
24
|
+
})
|
|
25
|
+
: undefined,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
export function coverageFhirR4ToFlat(resource) {
|
|
29
|
+
const classValues = Array.isArray(resource.class)
|
|
30
|
+
? resource.class
|
|
31
|
+
.map((item) => {
|
|
32
|
+
const type = item?.type?.text;
|
|
33
|
+
const value = item?.value;
|
|
34
|
+
return type && value ? `${type}|${value}` : undefined;
|
|
35
|
+
})
|
|
36
|
+
.filter((item) => Boolean(item))
|
|
37
|
+
: [];
|
|
38
|
+
return {
|
|
39
|
+
[CoverageClaim.Identifier]: resource.identifier?.[0]?.value,
|
|
40
|
+
[CoverageClaim.Status]: resource.status,
|
|
41
|
+
[CoverageClaim.Type]: codingToValue(resource.type?.coding?.[0]),
|
|
42
|
+
[CoverageClaim.PolicyHolder]: referenceToValue(resource.policyHolder),
|
|
43
|
+
[CoverageClaim.Subscriber]: referenceToValue(resource.subscriber),
|
|
44
|
+
[CoverageClaim.Beneficiary]: referenceToValue(resource.beneficiary),
|
|
45
|
+
[CoverageClaim.Relationship]: codingToValue(resource.relationship?.coding?.[0]),
|
|
46
|
+
[CoverageClaim.PeriodStart]: resource.period?.start,
|
|
47
|
+
[CoverageClaim.PeriodEnd]: resource.period?.end,
|
|
48
|
+
[CoverageClaim.Payor]: referenceListToCsv(resource.payor),
|
|
49
|
+
[CoverageClaim.Class]: classValues.length ? classValues.join(',') : undefined,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
// Copyright 2026 Conéctate Soluciones y Aplicaciones SL under the Apache License, Version 2.0.
|
|
2
|
+
// File: src/utils/convert-device-use-statement.ts
|
|
3
|
+
import { DeviceUseStatementClaim } from '../models/interoperable-claims/device-use-statement-claims.js';
|
|
4
|
+
import { requireClaim } from './convert-shared.js';
|
|
5
|
+
export function deviceUseStatementFlatToFhirR4(claims) {
|
|
6
|
+
const subject = requireClaim(claims, DeviceUseStatementClaim.Subject);
|
|
7
|
+
const device = requireClaim(claims, DeviceUseStatementClaim.Device);
|
|
8
|
+
const status = requireClaim(claims, DeviceUseStatementClaim.Status);
|
|
9
|
+
return {
|
|
10
|
+
resourceType: 'DeviceUseStatement',
|
|
11
|
+
identifier: claims[DeviceUseStatementClaim.Identifier] ? [{ value: claims[DeviceUseStatementClaim.Identifier] }] : undefined,
|
|
12
|
+
subject: { reference: subject },
|
|
13
|
+
device: { reference: device },
|
|
14
|
+
status,
|
|
15
|
+
recordedOn: claims[DeviceUseStatementClaim.RecordedOn],
|
|
16
|
+
timingDateTime: claims[DeviceUseStatementClaim.TimingDateTime],
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
export function deviceUseStatementFhirR4ToFlat(resource) {
|
|
20
|
+
return {
|
|
21
|
+
[DeviceUseStatementClaim.Identifier]: resource.identifier?.[0]?.value,
|
|
22
|
+
[DeviceUseStatementClaim.Subject]: resource.subject?.reference,
|
|
23
|
+
[DeviceUseStatementClaim.Device]: resource.device?.reference,
|
|
24
|
+
[DeviceUseStatementClaim.Status]: resource.status,
|
|
25
|
+
[DeviceUseStatementClaim.RecordedOn]: resource.recordedOn,
|
|
26
|
+
[DeviceUseStatementClaim.TimingDateTime]: resource.timingDateTime,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
// Copyright 2026 Conéctate Soluciones y Aplicaciones SL under the Apache License, Version 2.0.
|
|
2
|
+
// File: src/utils/convert-device.ts
|
|
3
|
+
import { DeviceClaim } from '../models/interoperable-claims/device-claims.js';
|
|
4
|
+
import { codingFromValue, codingToValue, referenceToValue } from './convert-shared.js';
|
|
5
|
+
export function deviceFlatToFhirR4(claims) {
|
|
6
|
+
return {
|
|
7
|
+
resourceType: 'Device',
|
|
8
|
+
identifier: claims[DeviceClaim.Identifier] ? [{ value: claims[DeviceClaim.Identifier] }] : undefined,
|
|
9
|
+
deviceName: claims[DeviceClaim.DeviceName] ? [{ name: claims[DeviceClaim.DeviceName] }] : undefined,
|
|
10
|
+
location: claims[DeviceClaim.Location] ? { reference: claims[DeviceClaim.Location] } : undefined,
|
|
11
|
+
manufacturer: claims[DeviceClaim.Manufacturer],
|
|
12
|
+
modelNumber: claims[DeviceClaim.Model],
|
|
13
|
+
owner: claims[DeviceClaim.Organization] ? { reference: claims[DeviceClaim.Organization] } : undefined,
|
|
14
|
+
patient: claims[DeviceClaim.Patient] ? { reference: claims[DeviceClaim.Patient] } : undefined,
|
|
15
|
+
serialNumber: claims[DeviceClaim.SerialNumber],
|
|
16
|
+
status: claims[DeviceClaim.Status],
|
|
17
|
+
type: claims[DeviceClaim.Type] ? { coding: codingFromValue(claims[DeviceClaim.Type]) } : undefined,
|
|
18
|
+
udiCarrier: claims[DeviceClaim.UdiCarrier] ? [{ carrierHRF: claims[DeviceClaim.UdiCarrier] }] : undefined,
|
|
19
|
+
url: claims[DeviceClaim.Url],
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
export function deviceFhirR4ToFlat(resource) {
|
|
23
|
+
return {
|
|
24
|
+
[DeviceClaim.DeviceName]: resource.deviceName?.[0]?.name,
|
|
25
|
+
[DeviceClaim.Identifier]: resource.identifier?.[0]?.value,
|
|
26
|
+
[DeviceClaim.Location]: referenceToValue(resource.location),
|
|
27
|
+
[DeviceClaim.Manufacturer]: resource.manufacturer,
|
|
28
|
+
[DeviceClaim.Model]: resource.modelNumber || resource.model,
|
|
29
|
+
[DeviceClaim.Organization]: referenceToValue(resource.owner),
|
|
30
|
+
[DeviceClaim.Patient]: referenceToValue(resource.patient),
|
|
31
|
+
[DeviceClaim.SerialNumber]: resource.serialNumber,
|
|
32
|
+
[DeviceClaim.Status]: resource.status,
|
|
33
|
+
[DeviceClaim.Type]: codingToValue(resource.type?.coding?.[0]),
|
|
34
|
+
[DeviceClaim.UdiCarrier]: resource.udiCarrier?.[0]?.carrierHRF,
|
|
35
|
+
[DeviceClaim.Url]: resource.url,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
// Copyright 2026 Conéctate Soluciones y Aplicaciones SL under the Apache License, Version 2.0.
|
|
2
|
+
// File: src/utils/convert-diagnostic-report.ts
|
|
3
|
+
import { DiagnosticReportClaim } from '../models/interoperable-claims/diagnostic-report-claims.js';
|
|
4
|
+
import { codingFromValue, codingToValue, referenceListToCsv, referenceToValue } from './convert-shared.js';
|
|
5
|
+
export function diagnosticReportFlatToFhirR4(claims) {
|
|
6
|
+
const subject = claims[DiagnosticReportClaim.Subject] ?? claims[DiagnosticReportClaim.Patient];
|
|
7
|
+
return {
|
|
8
|
+
resourceType: 'DiagnosticReport',
|
|
9
|
+
identifier: claims[DiagnosticReportClaim.Identifier] ? [{ value: claims[DiagnosticReportClaim.Identifier] }] : undefined,
|
|
10
|
+
status: claims[DiagnosticReportClaim.Status],
|
|
11
|
+
category: claims[DiagnosticReportClaim.Category] ? [{ coding: codingFromValue(claims[DiagnosticReportClaim.Category]) }] : undefined,
|
|
12
|
+
code: claims[DiagnosticReportClaim.Code] ? { coding: codingFromValue(claims[DiagnosticReportClaim.Code]) } : undefined,
|
|
13
|
+
subject: subject ? { reference: subject } : undefined,
|
|
14
|
+
encounter: claims[DiagnosticReportClaim.Encounter] ? { reference: claims[DiagnosticReportClaim.Encounter] } : undefined,
|
|
15
|
+
effectiveDateTime: claims[DiagnosticReportClaim.Date],
|
|
16
|
+
basedOn: claims[DiagnosticReportClaim.BasedOn] ? claims[DiagnosticReportClaim.BasedOn].split(',').map((reference) => ({ reference: reference.trim() })) : undefined,
|
|
17
|
+
performer: claims[DiagnosticReportClaim.Performer] ? claims[DiagnosticReportClaim.Performer].split(',').map((reference) => ({ reference: reference.trim() })) : undefined,
|
|
18
|
+
result: claims[DiagnosticReportClaim.Result] ? claims[DiagnosticReportClaim.Result].split(',').map((reference) => ({ reference: reference.trim() })) : undefined,
|
|
19
|
+
resultsInterpreter: claims[DiagnosticReportClaim.ResultsInterpreter] ? claims[DiagnosticReportClaim.ResultsInterpreter].split(',').map((reference) => ({ reference: reference.trim() })) : undefined,
|
|
20
|
+
specimen: claims[DiagnosticReportClaim.Specimen] ? claims[DiagnosticReportClaim.Specimen].split(',').map((reference) => ({ reference: reference.trim() })) : undefined,
|
|
21
|
+
media: claims[DiagnosticReportClaim.Media] ? claims[DiagnosticReportClaim.Media].split(',').map((reference) => ({ link: { reference: reference.trim() } })) : undefined,
|
|
22
|
+
presentedForm: (claims[DiagnosticReportClaim.PresentedFormContentType] || claims[DiagnosticReportClaim.PresentedFormData] || claims[DiagnosticReportClaim.PresentedFormUrl]) ? [{
|
|
23
|
+
contentType: claims[DiagnosticReportClaim.PresentedFormContentType],
|
|
24
|
+
data: claims[DiagnosticReportClaim.PresentedFormData],
|
|
25
|
+
url: claims[DiagnosticReportClaim.PresentedFormUrl],
|
|
26
|
+
}] : undefined,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
export function diagnosticReportFhirR4ToFlat(resource) {
|
|
30
|
+
const form = Array.isArray(resource.presentedForm) ? resource.presentedForm[0] : undefined;
|
|
31
|
+
const media = Array.isArray(resource.media)
|
|
32
|
+
? resource.media
|
|
33
|
+
.map((item) => referenceToValue(item?.link))
|
|
34
|
+
.filter((item) => Boolean(item))
|
|
35
|
+
: [];
|
|
36
|
+
return {
|
|
37
|
+
[DiagnosticReportClaim.BasedOn]: referenceListToCsv(resource.basedOn),
|
|
38
|
+
[DiagnosticReportClaim.Category]: codingToValue(resource.category?.[0]?.coding?.[0]),
|
|
39
|
+
[DiagnosticReportClaim.Code]: codingToValue(resource.code?.coding?.[0]),
|
|
40
|
+
[DiagnosticReportClaim.Date]: resource.effectiveDateTime || resource.issued,
|
|
41
|
+
[DiagnosticReportClaim.Encounter]: referenceToValue(resource.encounter),
|
|
42
|
+
[DiagnosticReportClaim.Identifier]: resource.identifier?.[0]?.value,
|
|
43
|
+
[DiagnosticReportClaim.Media]: media.length ? media.join(',') : undefined,
|
|
44
|
+
[DiagnosticReportClaim.Patient]: referenceToValue(resource.subject),
|
|
45
|
+
[DiagnosticReportClaim.Performer]: referenceListToCsv(resource.performer),
|
|
46
|
+
[DiagnosticReportClaim.Result]: referenceListToCsv(resource.result),
|
|
47
|
+
[DiagnosticReportClaim.ResultsInterpreter]: referenceListToCsv(resource.resultsInterpreter),
|
|
48
|
+
[DiagnosticReportClaim.Specimen]: referenceListToCsv(resource.specimen),
|
|
49
|
+
[DiagnosticReportClaim.Status]: resource.status,
|
|
50
|
+
[DiagnosticReportClaim.Subject]: referenceToValue(resource.subject),
|
|
51
|
+
[DiagnosticReportClaim.PresentedFormContentType]: form?.contentType,
|
|
52
|
+
[DiagnosticReportClaim.PresentedFormData]: form?.data,
|
|
53
|
+
[DiagnosticReportClaim.PresentedFormUrl]: form?.url,
|
|
54
|
+
};
|
|
55
|
+
}
|