gdc-common-utils-ts 1.14.10 → 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 +54 -1
- 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-session.js +2 -2
- package/dist/examples/shared.d.ts +19 -0
- package/dist/examples/shared.js +73 -0
- 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-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
|
@@ -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-document-reference.ts
|
|
3
|
+
import { DocumentReferenceClaim } from '../models/interoperable-claims/document-reference-claims.js';
|
|
4
|
+
import { requireClaim } from './convert-shared.js';
|
|
5
|
+
export function documentReferenceFlatToFhirR4(claims) {
|
|
6
|
+
const subject = requireClaim(claims, DocumentReferenceClaim.Subject);
|
|
7
|
+
return {
|
|
8
|
+
resourceType: 'DocumentReference',
|
|
9
|
+
identifier: claims[DocumentReferenceClaim.Identifier] ? [{ value: claims[DocumentReferenceClaim.Identifier] }] : undefined,
|
|
10
|
+
subject: { reference: subject },
|
|
11
|
+
description: claims[DocumentReferenceClaim.Description],
|
|
12
|
+
date: claims[DocumentReferenceClaim.Date],
|
|
13
|
+
content: [{ attachment: {
|
|
14
|
+
contentType: claims[DocumentReferenceClaim.ContentType],
|
|
15
|
+
data: claims[DocumentReferenceClaim.ContentData],
|
|
16
|
+
url: claims[DocumentReferenceClaim.Location],
|
|
17
|
+
hash: claims[DocumentReferenceClaim.ContentHash],
|
|
18
|
+
language: claims[DocumentReferenceClaim.Language],
|
|
19
|
+
} }],
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
export function documentReferenceFhirR4ToFlat(resource) {
|
|
23
|
+
const attachment = resource.content?.[0]?.attachment;
|
|
24
|
+
return {
|
|
25
|
+
[DocumentReferenceClaim.Identifier]: resource.identifier?.[0]?.value,
|
|
26
|
+
[DocumentReferenceClaim.Subject]: resource.subject?.reference,
|
|
27
|
+
[DocumentReferenceClaim.Description]: resource.description,
|
|
28
|
+
[DocumentReferenceClaim.Date]: resource.date,
|
|
29
|
+
[DocumentReferenceClaim.ContentType]: attachment?.contentType,
|
|
30
|
+
[DocumentReferenceClaim.ContentData]: attachment?.data,
|
|
31
|
+
[DocumentReferenceClaim.Location]: attachment?.url,
|
|
32
|
+
[DocumentReferenceClaim.ContentHash]: attachment?.hash,
|
|
33
|
+
[DocumentReferenceClaim.Language]: attachment?.language,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
// Copyright 2026 Conéctate Soluciones y Aplicaciones SL under the Apache License, Version 2.0.
|
|
2
|
+
// File: src/utils/convert-encounter.ts
|
|
3
|
+
import { EncounterClaim } from '../models/interoperable-claims/encounter-claims.js';
|
|
4
|
+
import { codingFromValue, codingToValue, referenceToValue } from './convert-shared.js';
|
|
5
|
+
export function encounterFlatToFhirR4(claims) {
|
|
6
|
+
const subject = claims[EncounterClaim.Subject] ?? claims[EncounterClaim.Patient];
|
|
7
|
+
return {
|
|
8
|
+
resourceType: 'Encounter',
|
|
9
|
+
identifier: claims[EncounterClaim.Identifier] ? [{ value: claims[EncounterClaim.Identifier] }] : undefined,
|
|
10
|
+
status: claims[EncounterClaim.Status],
|
|
11
|
+
class: claims[EncounterClaim.Class]
|
|
12
|
+
? (() => {
|
|
13
|
+
const [system, code] = claims[EncounterClaim.Class].split('|');
|
|
14
|
+
return code ? { system, code } : { code: system };
|
|
15
|
+
})()
|
|
16
|
+
: undefined,
|
|
17
|
+
type: claims[EncounterClaim.Type] ? [{ coding: codingFromValue(claims[EncounterClaim.Type]) }] : undefined,
|
|
18
|
+
subject: subject ? { reference: subject } : undefined,
|
|
19
|
+
participant: claims[EncounterClaim.Participant]
|
|
20
|
+
? claims[EncounterClaim.Participant].split(',').map((reference) => ({ individual: { reference: reference.trim() } }))
|
|
21
|
+
: undefined,
|
|
22
|
+
serviceProvider: claims[EncounterClaim.ServiceProvider] ? { reference: claims[EncounterClaim.ServiceProvider] } : undefined,
|
|
23
|
+
period: (claims[EncounterClaim.PeriodStart] || claims[EncounterClaim.PeriodEnd]) ? {
|
|
24
|
+
start: claims[EncounterClaim.PeriodStart],
|
|
25
|
+
end: claims[EncounterClaim.PeriodEnd],
|
|
26
|
+
} : undefined,
|
|
27
|
+
reasonCode: claims[EncounterClaim.ReasonCode] ? [{ coding: codingFromValue(claims[EncounterClaim.ReasonCode]) }] : undefined,
|
|
28
|
+
diagnosis: claims[EncounterClaim.Diagnosis]
|
|
29
|
+
? claims[EncounterClaim.Diagnosis].split(',').map((reference) => ({ condition: { reference: reference.trim() } }))
|
|
30
|
+
: undefined,
|
|
31
|
+
location: claims[EncounterClaim.Location]
|
|
32
|
+
? claims[EncounterClaim.Location].split(',').map((reference) => ({ location: { reference: reference.trim() } }))
|
|
33
|
+
: undefined,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
export function encounterFhirR4ToFlat(resource) {
|
|
37
|
+
const klass = resource.class;
|
|
38
|
+
return {
|
|
39
|
+
[EncounterClaim.Identifier]: resource.identifier?.[0]?.value,
|
|
40
|
+
[EncounterClaim.Status]: resource.status,
|
|
41
|
+
[EncounterClaim.Class]: klass?.code ? (klass.system ? `${klass.system}|${klass.code}` : klass.code) : undefined,
|
|
42
|
+
[EncounterClaim.Type]: codingToValue(resource.type?.[0]?.coding?.[0]),
|
|
43
|
+
[EncounterClaim.Subject]: referenceToValue(resource.subject),
|
|
44
|
+
[EncounterClaim.Patient]: referenceToValue(resource.subject),
|
|
45
|
+
[EncounterClaim.Participant]: Array.isArray(resource.participant)
|
|
46
|
+
? resource.participant
|
|
47
|
+
.map((item) => referenceToValue(item?.individual))
|
|
48
|
+
.filter((item) => Boolean(item))
|
|
49
|
+
.join(',')
|
|
50
|
+
: undefined,
|
|
51
|
+
[EncounterClaim.ServiceProvider]: referenceToValue(resource.serviceProvider),
|
|
52
|
+
[EncounterClaim.PeriodStart]: resource.period?.start,
|
|
53
|
+
[EncounterClaim.PeriodEnd]: resource.period?.end,
|
|
54
|
+
[EncounterClaim.ReasonCode]: codingToValue(resource.reasonCode?.[0]?.coding?.[0]),
|
|
55
|
+
[EncounterClaim.Diagnosis]: Array.isArray(resource.diagnosis)
|
|
56
|
+
? resource.diagnosis
|
|
57
|
+
.map((item) => referenceToValue(item?.condition))
|
|
58
|
+
.filter((item) => Boolean(item))
|
|
59
|
+
.join(',')
|
|
60
|
+
: undefined,
|
|
61
|
+
[EncounterClaim.Location]: Array.isArray(resource.location)
|
|
62
|
+
? resource.location
|
|
63
|
+
.map((item) => referenceToValue(item?.location))
|
|
64
|
+
.filter((item) => Boolean(item))
|
|
65
|
+
.join(',')
|
|
66
|
+
: undefined,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
@@ -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-flag.ts
|
|
3
|
+
import { FlagClaim } from '../models/interoperable-claims/flag-claims.js';
|
|
4
|
+
import { codingFromValue, codingToValue, referenceToValue } from './convert-shared.js';
|
|
5
|
+
export function flagFlatToFhirR4(claims) {
|
|
6
|
+
const subject = claims[FlagClaim.Subject] ?? claims[FlagClaim.Patient];
|
|
7
|
+
return {
|
|
8
|
+
resourceType: 'Flag',
|
|
9
|
+
identifier: claims[FlagClaim.Identifier] ? [{ value: claims[FlagClaim.Identifier] }] : undefined,
|
|
10
|
+
status: claims[FlagClaim.Status],
|
|
11
|
+
category: claims[FlagClaim.Category] ? { coding: codingFromValue(claims[FlagClaim.Category]) } : undefined,
|
|
12
|
+
code: claims[FlagClaim.Code] ? { coding: codingFromValue(claims[FlagClaim.Code]) } : undefined,
|
|
13
|
+
subject: subject ? { reference: subject } : undefined,
|
|
14
|
+
author: claims[FlagClaim.Author] ? { reference: claims[FlagClaim.Author] } : undefined,
|
|
15
|
+
encounter: claims[FlagClaim.Encounter] ? { reference: claims[FlagClaim.Encounter] } : undefined,
|
|
16
|
+
period: (claims[FlagClaim.PeriodStart] || claims[FlagClaim.PeriodEnd]) ? { start: claims[FlagClaim.PeriodStart], end: claims[FlagClaim.PeriodEnd] } : undefined,
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
export function flagFhirR4ToFlat(resource) {
|
|
20
|
+
const period = resource.period;
|
|
21
|
+
return {
|
|
22
|
+
[FlagClaim.Author]: referenceToValue(resource.author),
|
|
23
|
+
[FlagClaim.Date]: undefined,
|
|
24
|
+
[FlagClaim.Encounter]: referenceToValue(resource.encounter),
|
|
25
|
+
[FlagClaim.Identifier]: resource.identifier?.[0]?.value,
|
|
26
|
+
[FlagClaim.Patient]: referenceToValue(resource.subject),
|
|
27
|
+
[FlagClaim.Subject]: referenceToValue(resource.subject),
|
|
28
|
+
[FlagClaim.Status]: resource.status,
|
|
29
|
+
[FlagClaim.Category]: codingToValue(resource.category?.coding?.[0]),
|
|
30
|
+
[FlagClaim.Code]: codingToValue(resource.code?.coding?.[0]),
|
|
31
|
+
[FlagClaim.PeriodStart]: period?.start,
|
|
32
|
+
[FlagClaim.PeriodEnd]: period?.end,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
// Copyright 2026 Conéctate Soluciones y Aplicaciones SL under the Apache License, Version 2.0.
|
|
2
|
+
// File: src/utils/convert-immunization.ts
|
|
3
|
+
import { ImmunizationClaim } from '../models/interoperable-claims/immunization-claims.js';
|
|
4
|
+
import { codingFromValue, codingToValue, referenceToValue } from './convert-shared.js';
|
|
5
|
+
export function immunizationFlatToFhirR4(claims) {
|
|
6
|
+
const subject = claims[ImmunizationClaim.Subject] ?? claims[ImmunizationClaim.Patient];
|
|
7
|
+
return {
|
|
8
|
+
resourceType: 'Immunization',
|
|
9
|
+
identifier: claims[ImmunizationClaim.Identifier] ? [{ value: claims[ImmunizationClaim.Identifier] }] : undefined,
|
|
10
|
+
status: claims[ImmunizationClaim.Status],
|
|
11
|
+
vaccineCode: claims[ImmunizationClaim.VaccineCode] ? { coding: codingFromValue(claims[ImmunizationClaim.VaccineCode]) } : undefined,
|
|
12
|
+
patient: subject ? { reference: subject } : undefined,
|
|
13
|
+
occurrenceDateTime: claims[ImmunizationClaim.Date],
|
|
14
|
+
location: claims[ImmunizationClaim.Location] ? { reference: claims[ImmunizationClaim.Location] } : undefined,
|
|
15
|
+
manufacturer: claims[ImmunizationClaim.Manufacturer] ? { reference: claims[ImmunizationClaim.Manufacturer] } : undefined,
|
|
16
|
+
lotNumber: claims[ImmunizationClaim.LotNumber],
|
|
17
|
+
performer: claims[ImmunizationClaim.Performer] ? claims[ImmunizationClaim.Performer].split(',').map((reference) => ({ actor: { reference: reference.trim() } })) : undefined,
|
|
18
|
+
reasonCode: claims[ImmunizationClaim.ReasonCode] ? [{ coding: codingFromValue(claims[ImmunizationClaim.ReasonCode]) }] : undefined,
|
|
19
|
+
reasonReference: claims[ImmunizationClaim.ReasonReference] ? [{ reference: claims[ImmunizationClaim.ReasonReference] }] : undefined,
|
|
20
|
+
statusReason: claims[ImmunizationClaim.StatusReason] ? { coding: codingFromValue(claims[ImmunizationClaim.StatusReason]) } : undefined,
|
|
21
|
+
note: claims[ImmunizationClaim.Note] ? [{ text: claims[ImmunizationClaim.Note] }] : undefined,
|
|
22
|
+
protocolApplied: (claims[ImmunizationClaim.Series] || claims[ImmunizationClaim.TargetDisease] || claims[ImmunizationClaim.DoseSequence]) ? [{
|
|
23
|
+
series: claims[ImmunizationClaim.Series],
|
|
24
|
+
targetDisease: claims[ImmunizationClaim.TargetDisease] ? [{ coding: codingFromValue(claims[ImmunizationClaim.TargetDisease]) }] : undefined,
|
|
25
|
+
doseNumberString: claims[ImmunizationClaim.DoseSequence],
|
|
26
|
+
}] : undefined,
|
|
27
|
+
reaction: claims[ImmunizationClaim.ReactionDate] ? [{ date: claims[ImmunizationClaim.ReactionDate] }] : undefined,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
export function immunizationFhirR4ToFlat(resource) {
|
|
31
|
+
const reaction = Array.isArray(resource.reaction) ? resource.reaction[0] : undefined;
|
|
32
|
+
const protocolApplied = Array.isArray(resource.protocolApplied) ? resource.protocolApplied[0] : undefined;
|
|
33
|
+
const performer = Array.isArray(resource.performer)
|
|
34
|
+
? resource.performer.map((item) => referenceToValue(item?.actor)).filter((item) => Boolean(item))
|
|
35
|
+
: [];
|
|
36
|
+
return {
|
|
37
|
+
[ImmunizationClaim.Identifier]: resource.identifier?.[0]?.value,
|
|
38
|
+
[ImmunizationClaim.Date]: resource.occurrenceDateTime,
|
|
39
|
+
[ImmunizationClaim.Location]: referenceToValue(resource.location),
|
|
40
|
+
[ImmunizationClaim.LotNumber]: resource.lotNumber,
|
|
41
|
+
[ImmunizationClaim.Manufacturer]: referenceToValue(resource.manufacturer),
|
|
42
|
+
[ImmunizationClaim.Patient]: referenceToValue(resource.patient),
|
|
43
|
+
[ImmunizationClaim.Performer]: performer.length ? performer.join(',') : undefined,
|
|
44
|
+
[ImmunizationClaim.ReactionDate]: reaction?.date,
|
|
45
|
+
[ImmunizationClaim.ReasonCode]: codingToValue(resource.reasonCode?.[0]?.coding?.[0]),
|
|
46
|
+
[ImmunizationClaim.ReasonReference]: referenceToValue(resource.reasonReference?.[0]),
|
|
47
|
+
[ImmunizationClaim.Series]: protocolApplied?.series,
|
|
48
|
+
[ImmunizationClaim.Status]: resource.status,
|
|
49
|
+
[ImmunizationClaim.StatusReason]: codingToValue(resource.statusReason?.coding?.[0]),
|
|
50
|
+
[ImmunizationClaim.TargetDisease]: codingToValue(protocolApplied?.targetDisease?.[0]?.coding?.[0]),
|
|
51
|
+
[ImmunizationClaim.VaccineCode]: codingToValue(resource.vaccineCode?.coding?.[0]),
|
|
52
|
+
[ImmunizationClaim.DoseSequence]: protocolApplied?.doseNumberString,
|
|
53
|
+
[ImmunizationClaim.Subject]: referenceToValue(resource.patient),
|
|
54
|
+
[ImmunizationClaim.Note]: resource.note?.[0]?.text,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
// Copyright 2026 Conéctate Soluciones y Aplicaciones SL under the Apache License, Version 2.0.
|
|
2
|
+
// File: src/convert/convert-location.ts
|
|
3
|
+
import { LocationClaim } from '../models/interoperable-claims/location-claims.js';
|
|
4
|
+
import { codingFromValue, codingToValue, referenceToValue } from './convert-shared.js';
|
|
5
|
+
function splitCsv(value) {
|
|
6
|
+
return String(value || '')
|
|
7
|
+
.split(',')
|
|
8
|
+
.map((item) => item.trim())
|
|
9
|
+
.filter(Boolean);
|
|
10
|
+
}
|
|
11
|
+
export function locationFlatToFhirR4(claims) {
|
|
12
|
+
return {
|
|
13
|
+
resourceType: 'Location',
|
|
14
|
+
identifier: claims[LocationClaim.Identifier] ? [{ value: claims[LocationClaim.Identifier] }] : undefined,
|
|
15
|
+
status: claims[LocationClaim.Status],
|
|
16
|
+
name: claims[LocationClaim.Name],
|
|
17
|
+
description: claims[LocationClaim.Description],
|
|
18
|
+
type: claims[LocationClaim.Type] ? [{ coding: codingFromValue(claims[LocationClaim.Type]) }] : undefined,
|
|
19
|
+
mode: claims[LocationClaim.Mode],
|
|
20
|
+
telecom: splitCsv(claims[LocationClaim.Telecom]).map((value) => ({ value })),
|
|
21
|
+
address: claims[LocationClaim.Address] ? { text: claims[LocationClaim.Address] } : undefined,
|
|
22
|
+
physicalType: claims[LocationClaim.PhysicalType] ? { coding: codingFromValue(claims[LocationClaim.PhysicalType]) } : undefined,
|
|
23
|
+
managingOrganization: claims[LocationClaim.ManagingOrganization] ? { reference: claims[LocationClaim.ManagingOrganization] } : undefined,
|
|
24
|
+
partOf: claims[LocationClaim.PartOf] ? { reference: claims[LocationClaim.PartOf] } : undefined,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
export function locationFhirR4ToFlat(resource) {
|
|
28
|
+
const telecom = resource.telecom
|
|
29
|
+
?.map((item) => item?.value)
|
|
30
|
+
.filter((item) => Boolean(item));
|
|
31
|
+
return {
|
|
32
|
+
[LocationClaim.Identifier]: resource.identifier?.[0]?.value,
|
|
33
|
+
[LocationClaim.Status]: resource.status,
|
|
34
|
+
[LocationClaim.Name]: resource.name,
|
|
35
|
+
[LocationClaim.Description]: resource.description,
|
|
36
|
+
[LocationClaim.Type]: codingToValue(resource.type?.[0]?.coding?.[0]),
|
|
37
|
+
[LocationClaim.Mode]: resource.mode,
|
|
38
|
+
[LocationClaim.Telecom]: telecom?.length ? telecom.join(',') : undefined,
|
|
39
|
+
[LocationClaim.Address]: resource.address?.text,
|
|
40
|
+
[LocationClaim.PhysicalType]: codingToValue(resource.physicalType?.coding?.[0]),
|
|
41
|
+
[LocationClaim.ManagingOrganization]: referenceToValue(resource.managingOrganization),
|
|
42
|
+
[LocationClaim.PartOf]: referenceToValue(resource.partOf),
|
|
43
|
+
};
|
|
44
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
// Copyright 2026 Conéctate Soluciones y Aplicaciones SL under the Apache License, Version 2.0.
|
|
2
|
+
// File: src/utils/convert-medication-statement.ts
|
|
3
|
+
import { MedicationStatementClaim } from '../models/interoperable-claims/medication-statement-claims.js';
|
|
4
|
+
import { codingFromValue, codingToValue, requireClaim } from './convert-shared.js';
|
|
5
|
+
export function medicationStatementFlatToFhirR4(claims) {
|
|
6
|
+
const subject = requireClaim(claims, MedicationStatementClaim.Subject);
|
|
7
|
+
const status = requireClaim(claims, MedicationStatementClaim.Status);
|
|
8
|
+
const effectiveDateTime = claims[MedicationStatementClaim.Effective];
|
|
9
|
+
const medicationText = claims[MedicationStatementClaim.MedicationText];
|
|
10
|
+
const medicationIdentifier = claims[MedicationStatementClaim.MedicationIdentifier];
|
|
11
|
+
const medicationSerialNumber = claims[MedicationStatementClaim.MedicationSerialNumber];
|
|
12
|
+
const medicationExpirationDate = claims[MedicationStatementClaim.MedicationExpirationDate];
|
|
13
|
+
const hasContainedMedication = Boolean(medicationIdentifier) || Boolean(medicationSerialNumber) || Boolean(medicationExpirationDate) || Boolean(medicationText);
|
|
14
|
+
const containedMedicationId = 'medication-contained-1';
|
|
15
|
+
const containedMedication = hasContainedMedication ? {
|
|
16
|
+
resourceType: 'Medication',
|
|
17
|
+
id: containedMedicationId,
|
|
18
|
+
identifier: medicationIdentifier ? [{ value: medicationIdentifier }] : undefined,
|
|
19
|
+
code: medicationText ? { text: medicationText } : undefined,
|
|
20
|
+
batch: medicationSerialNumber || medicationExpirationDate ? {
|
|
21
|
+
lotNumber: medicationSerialNumber,
|
|
22
|
+
expirationDate: medicationExpirationDate,
|
|
23
|
+
} : undefined,
|
|
24
|
+
} : undefined;
|
|
25
|
+
return {
|
|
26
|
+
resourceType: 'MedicationStatement',
|
|
27
|
+
identifier: claims[MedicationStatementClaim.Identifier] ? [{ value: claims[MedicationStatementClaim.Identifier] }] : undefined,
|
|
28
|
+
status,
|
|
29
|
+
subject: { reference: subject },
|
|
30
|
+
effectiveDateTime,
|
|
31
|
+
medicationCodeableConcept: claims[MedicationStatementClaim.Code]
|
|
32
|
+
? { coding: codingFromValue(claims[MedicationStatementClaim.Code]) }
|
|
33
|
+
: (!hasContainedMedication && medicationText ? { text: medicationText } : undefined),
|
|
34
|
+
medicationReference: hasContainedMedication ? { reference: `#${containedMedicationId}` } : undefined,
|
|
35
|
+
contained: containedMedication ? [containedMedication] : undefined,
|
|
36
|
+
dosage: claims[MedicationStatementClaim.DosageInstruction] ? [{ text: claims[MedicationStatementClaim.DosageInstruction] }] : undefined,
|
|
37
|
+
note: claims[MedicationStatementClaim.Note] ? [{ text: claims[MedicationStatementClaim.Note] }] : undefined,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
export function medicationStatementFhirR4ToFlat(resource) {
|
|
41
|
+
const medicationReference = resource.medicationReference?.reference;
|
|
42
|
+
const containedResources = Array.isArray(resource.contained) ? resource.contained : [];
|
|
43
|
+
const containedMedication = medicationReference?.startsWith('#')
|
|
44
|
+
? containedResources.find((item) => item?.resourceType === 'Medication' && String(item?.id || '') === medicationReference.slice(1))
|
|
45
|
+
: containedResources.find((item) => item?.resourceType === 'Medication');
|
|
46
|
+
const containedMedicationIdentifier = containedMedication?.identifier?.[0]?.value;
|
|
47
|
+
const containedMedicationText = containedMedication?.code?.text;
|
|
48
|
+
const batch = containedMedication?.batch;
|
|
49
|
+
const medicationCode = codingToValue(resource.medicationCodeableConcept?.coding?.[0]);
|
|
50
|
+
const medicationText = containedMedicationText || resource.medicationCodeableConcept?.text || undefined;
|
|
51
|
+
return {
|
|
52
|
+
[MedicationStatementClaim.Identifier]: resource.identifier?.[0]?.value,
|
|
53
|
+
[MedicationStatementClaim.Subject]: resource.subject?.reference,
|
|
54
|
+
[MedicationStatementClaim.Status]: resource.status,
|
|
55
|
+
[MedicationStatementClaim.Effective]: resource.effectiveDateTime,
|
|
56
|
+
[MedicationStatementClaim.Code]: medicationCode,
|
|
57
|
+
[MedicationStatementClaim.MedicationText]: medicationText,
|
|
58
|
+
[MedicationStatementClaim.Note]: resource.note?.[0]?.text,
|
|
59
|
+
[MedicationStatementClaim.DosageInstruction]: resource.dosage?.[0]?.text,
|
|
60
|
+
[MedicationStatementClaim.MedicationIdentifier]: containedMedicationIdentifier,
|
|
61
|
+
[MedicationStatementClaim.MedicationSerialNumber]: batch?.lotNumber,
|
|
62
|
+
[MedicationStatementClaim.MedicationExpirationDate]: batch?.expirationDate,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
// Copyright 2026 Conéctate Soluciones y Aplicaciones SL under the Apache License, Version 2.0.
|
|
2
|
+
// File: src/utils/convert-observation.ts
|
|
3
|
+
import { ObservationClaim } from '../models/interoperable-claims/observation-claims.js';
|
|
4
|
+
import { codingFromValue, codingListToCsv, codingToValue, referenceListToCsv, referenceToValue } from './convert-shared.js';
|
|
5
|
+
export function observationFlatToFhirR4(claims) {
|
|
6
|
+
const subject = claims[ObservationClaim.Subject] ?? claims[ObservationClaim.Patient];
|
|
7
|
+
return {
|
|
8
|
+
resourceType: 'Observation',
|
|
9
|
+
identifier: claims[ObservationClaim.Identifier] ? [{ value: claims[ObservationClaim.Identifier] }] : undefined,
|
|
10
|
+
status: claims[ObservationClaim.Status],
|
|
11
|
+
category: claims[ObservationClaim.Category] ? claims[ObservationClaim.Category].split(',').map((value) => ({ coding: codingFromValue(value.trim()) })) : undefined,
|
|
12
|
+
code: claims[ObservationClaim.Code] ? { coding: codingFromValue(claims[ObservationClaim.Code]) } : undefined,
|
|
13
|
+
subject: subject ? { reference: subject } : undefined,
|
|
14
|
+
effectiveDateTime: claims[ObservationClaim.EffectiveDateTime] ?? claims[ObservationClaim.Date],
|
|
15
|
+
issued: claims[ObservationClaim.EffectiveDateTime] ? undefined : claims[ObservationClaim.Date],
|
|
16
|
+
performer: claims[ObservationClaim.Performer] ? claims[ObservationClaim.Performer].split(',').map((reference) => ({ reference: reference.trim() })) : undefined,
|
|
17
|
+
valueCodeableConcept: claims[ObservationClaim.ValueConcept] ? { coding: codingFromValue(claims[ObservationClaim.ValueConcept]) } : undefined,
|
|
18
|
+
valueDateTime: claims[ObservationClaim.ValueDate],
|
|
19
|
+
valueString: claims[ObservationClaim.ValueString],
|
|
20
|
+
note: claims[ObservationClaim.Note] ? [{ text: claims[ObservationClaim.Note] }] : undefined,
|
|
21
|
+
basedOn: claims[ObservationClaim.BasedOn] ? claims[ObservationClaim.BasedOn].split(',').map((reference) => ({ reference: reference.trim() })) : undefined,
|
|
22
|
+
device: claims[ObservationClaim.Device] ? { reference: claims[ObservationClaim.Device] } : undefined,
|
|
23
|
+
encounter: claims[ObservationClaim.Encounter] ? { reference: claims[ObservationClaim.Encounter] } : undefined,
|
|
24
|
+
focus: claims[ObservationClaim.Focus] ? claims[ObservationClaim.Focus].split(',').map((reference) => ({ reference: reference.trim() })) : undefined,
|
|
25
|
+
hasMember: claims[ObservationClaim.HasMember] ? claims[ObservationClaim.HasMember].split(',').map((reference) => ({ reference: reference.trim() })) : undefined,
|
|
26
|
+
method: claims[ObservationClaim.Method] ? { coding: codingFromValue(claims[ObservationClaim.Method]) } : undefined,
|
|
27
|
+
specimen: claims[ObservationClaim.Specimen] ? { reference: claims[ObservationClaim.Specimen] } : undefined,
|
|
28
|
+
component: claims[ObservationClaim.ComponentCode] ? [{ code: { coding: codingFromValue(claims[ObservationClaim.ComponentCode]) } }] : undefined,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
export function observationFhirR4ToFlat(resource) {
|
|
32
|
+
const valueCodeableConcept = resource.valueCodeableConcept;
|
|
33
|
+
const component = Array.isArray(resource.component) ? resource.component[0] : undefined;
|
|
34
|
+
return {
|
|
35
|
+
[ObservationClaim.BasedOn]: referenceListToCsv(resource.basedOn),
|
|
36
|
+
[ObservationClaim.Category]: codingListToCsv(resource.category?.flatMap((item) => item.coding || [])),
|
|
37
|
+
[ObservationClaim.Code]: codingToValue(resource.code?.coding?.[0]),
|
|
38
|
+
[ObservationClaim.Date]: resource.effectiveDateTime || resource.issued,
|
|
39
|
+
[ObservationClaim.Device]: referenceToValue(resource.device),
|
|
40
|
+
[ObservationClaim.Encounter]: referenceToValue(resource.encounter),
|
|
41
|
+
[ObservationClaim.Focus]: referenceListToCsv(resource.focus),
|
|
42
|
+
[ObservationClaim.HasMember]: referenceListToCsv(resource.hasMember),
|
|
43
|
+
[ObservationClaim.Identifier]: resource.identifier?.[0]?.value,
|
|
44
|
+
[ObservationClaim.Method]: codingToValue(resource.method?.coding?.[0]),
|
|
45
|
+
[ObservationClaim.Patient]: referenceToValue(resource.subject),
|
|
46
|
+
[ObservationClaim.Performer]: referenceListToCsv(resource.performer),
|
|
47
|
+
[ObservationClaim.Specimen]: referenceToValue(resource.specimen),
|
|
48
|
+
[ObservationClaim.Status]: resource.status,
|
|
49
|
+
[ObservationClaim.Subject]: referenceToValue(resource.subject),
|
|
50
|
+
[ObservationClaim.ValueConcept]: codingToValue(valueCodeableConcept?.coding?.[0]),
|
|
51
|
+
[ObservationClaim.ValueDate]: resource.valueDateTime,
|
|
52
|
+
[ObservationClaim.ValueString]: resource.valueString,
|
|
53
|
+
[ObservationClaim.ComponentCode]: codingToValue(component?.code?.coding?.[0]),
|
|
54
|
+
[ObservationClaim.Note]: resource.note?.[0]?.text,
|
|
55
|
+
[ObservationClaim.EffectiveDateTime]: resource.effectiveDateTime,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
// Copyright 2026 Conéctate Soluciones y Aplicaciones SL under the Apache License, Version 2.0.
|
|
2
|
+
// File: src/convert/convert-organization.ts
|
|
3
|
+
import { OrganizationClaim } from '../models/interoperable-claims/organization-claims.js';
|
|
4
|
+
import { codingFromValue, codingToValue, referenceToValue } from './convert-shared.js';
|
|
5
|
+
function splitCsv(value) {
|
|
6
|
+
return String(value || '')
|
|
7
|
+
.split(',')
|
|
8
|
+
.map((item) => item.trim())
|
|
9
|
+
.filter(Boolean);
|
|
10
|
+
}
|
|
11
|
+
export function organizationFlatToFhirR4(claims) {
|
|
12
|
+
return {
|
|
13
|
+
resourceType: 'Organization',
|
|
14
|
+
identifier: claims[OrganizationClaim.Identifier] ? [{ value: claims[OrganizationClaim.Identifier] }] : undefined,
|
|
15
|
+
active: claims[OrganizationClaim.Active] === undefined ? undefined : claims[OrganizationClaim.Active] === 'true',
|
|
16
|
+
type: claims[OrganizationClaim.Type] ? [{ coding: codingFromValue(claims[OrganizationClaim.Type]) }] : undefined,
|
|
17
|
+
name: claims[OrganizationClaim.Name],
|
|
18
|
+
alias: splitCsv(claims[OrganizationClaim.Alias]),
|
|
19
|
+
partOf: claims[OrganizationClaim.PartOf] ? { reference: claims[OrganizationClaim.PartOf] } : undefined,
|
|
20
|
+
telecom: splitCsv(claims[OrganizationClaim.Telecom]).map((value) => ({ value })),
|
|
21
|
+
address: claims[OrganizationClaim.Address] ? [{ text: claims[OrganizationClaim.Address] }] : undefined,
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
export function organizationFhirR4ToFlat(resource) {
|
|
25
|
+
const alias = resource.alias?.filter(Boolean);
|
|
26
|
+
const telecom = resource.telecom
|
|
27
|
+
?.map((item) => item?.value)
|
|
28
|
+
.filter((item) => Boolean(item));
|
|
29
|
+
return {
|
|
30
|
+
[OrganizationClaim.Identifier]: resource.identifier?.[0]?.value,
|
|
31
|
+
[OrganizationClaim.Active]: resource.active === undefined ? undefined : String(resource.active),
|
|
32
|
+
[OrganizationClaim.Type]: codingToValue(resource.type?.[0]?.coding?.[0]),
|
|
33
|
+
[OrganizationClaim.Name]: resource.name,
|
|
34
|
+
[OrganizationClaim.Alias]: alias?.length ? alias.join(',') : undefined,
|
|
35
|
+
[OrganizationClaim.PartOf]: referenceToValue(resource.partOf),
|
|
36
|
+
[OrganizationClaim.Telecom]: telecom?.length ? telecom.join(',') : undefined,
|
|
37
|
+
[OrganizationClaim.Address]: resource.address?.[0]?.text,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
// Copyright 2026 Conéctate Soluciones y Aplicaciones SL under the Apache License, Version 2.0.
|
|
2
|
+
// File: src/utils/convert-procedure.ts
|
|
3
|
+
import { ProcedureClaim } from '../models/interoperable-claims/procedure-claims.js';
|
|
4
|
+
import { codingFromValue, codingToValue, referenceListToCsv, referenceToValue } from './convert-shared.js';
|
|
5
|
+
export function procedureFlatToFhirR4(claims) {
|
|
6
|
+
const subject = claims[ProcedureClaim.Subject] ?? claims[ProcedureClaim.Patient];
|
|
7
|
+
return {
|
|
8
|
+
resourceType: 'Procedure',
|
|
9
|
+
identifier: claims[ProcedureClaim.Identifier] ? [{ value: claims[ProcedureClaim.Identifier] }] : undefined,
|
|
10
|
+
status: claims[ProcedureClaim.Status],
|
|
11
|
+
subject: subject ? { reference: subject } : undefined,
|
|
12
|
+
code: claims[ProcedureClaim.Code] ? { coding: codingFromValue(claims[ProcedureClaim.Code]) } : undefined,
|
|
13
|
+
performedDateTime: claims[ProcedureClaim.Date],
|
|
14
|
+
note: claims[ProcedureClaim.Note] ? [{ text: claims[ProcedureClaim.Note] }] : undefined,
|
|
15
|
+
basedOn: claims[ProcedureClaim.BasedOn] ? claims[ProcedureClaim.BasedOn].split(',').map((reference) => ({ reference: reference.trim() })) : undefined,
|
|
16
|
+
bodySite: claims[ProcedureClaim.BodySite] ? [{ coding: codingFromValue(claims[ProcedureClaim.BodySite]) }] : undefined,
|
|
17
|
+
encounter: claims[ProcedureClaim.Encounter] ? { reference: claims[ProcedureClaim.Encounter] } : undefined,
|
|
18
|
+
instantiatesCanonical: claims[ProcedureClaim.InstantiatesCanonical] ? [claims[ProcedureClaim.InstantiatesCanonical]] : undefined,
|
|
19
|
+
instantiatesUri: claims[ProcedureClaim.InstantiatesUri] ? [claims[ProcedureClaim.InstantiatesUri]] : undefined,
|
|
20
|
+
location: claims[ProcedureClaim.Location] ? { reference: claims[ProcedureClaim.Location] } : undefined,
|
|
21
|
+
partOf: claims[ProcedureClaim.PartOf] ? claims[ProcedureClaim.PartOf].split(',').map((reference) => ({ reference: reference.trim() })) : undefined,
|
|
22
|
+
performer: claims[ProcedureClaim.Performer] ? claims[ProcedureClaim.Performer].split(',').map((reference) => ({ actor: { reference: reference.trim() } })) : undefined,
|
|
23
|
+
reasonCode: claims[ProcedureClaim.ReasonCode] ? [{ coding: codingFromValue(claims[ProcedureClaim.ReasonCode]) }] : undefined,
|
|
24
|
+
reasonReference: claims[ProcedureClaim.ReasonReference] ? claims[ProcedureClaim.ReasonReference].split(',').map((reference) => ({ reference: reference.trim() })) : undefined,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
export function procedureFhirR4ToFlat(resource) {
|
|
28
|
+
const performer = Array.isArray(resource.performer)
|
|
29
|
+
? resource.performer.map((item) => referenceToValue(item?.actor)).filter((item) => Boolean(item))
|
|
30
|
+
: [];
|
|
31
|
+
return {
|
|
32
|
+
[ProcedureClaim.BasedOn]: referenceListToCsv(resource.basedOn),
|
|
33
|
+
[ProcedureClaim.BodySite]: codingToValue(resource.bodySite?.[0]?.coding?.[0]),
|
|
34
|
+
[ProcedureClaim.Code]: codingToValue(resource.code?.coding?.[0]),
|
|
35
|
+
[ProcedureClaim.Date]: resource.performedDateTime || resource.performedPeriod?.start,
|
|
36
|
+
[ProcedureClaim.Encounter]: referenceToValue(resource.encounter),
|
|
37
|
+
[ProcedureClaim.Identifier]: resource.identifier?.[0]?.value,
|
|
38
|
+
[ProcedureClaim.InstantiatesCanonical]: Array.isArray(resource.instantiatesCanonical) ? resource.instantiatesCanonical[0] : undefined,
|
|
39
|
+
[ProcedureClaim.InstantiatesUri]: Array.isArray(resource.instantiatesUri) ? resource.instantiatesUri[0] : undefined,
|
|
40
|
+
[ProcedureClaim.Location]: referenceToValue(resource.location),
|
|
41
|
+
[ProcedureClaim.PartOf]: referenceListToCsv(resource.partOf),
|
|
42
|
+
[ProcedureClaim.Patient]: referenceToValue(resource.subject),
|
|
43
|
+
[ProcedureClaim.Performer]: performer.length ? performer.join(',') : undefined,
|
|
44
|
+
[ProcedureClaim.ReasonCode]: codingToValue(resource.reasonCode?.[0]?.coding?.[0]),
|
|
45
|
+
[ProcedureClaim.ReasonReference]: referenceListToCsv(resource.reasonReference),
|
|
46
|
+
[ProcedureClaim.Status]: resource.status,
|
|
47
|
+
[ProcedureClaim.Subject]: referenceToValue(resource.subject),
|
|
48
|
+
[ProcedureClaim.Note]: resource.note?.[0]?.text,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
// Copyright 2026 Conéctate Soluciones y Aplicaciones SL under the Apache License, Version 2.0.
|
|
2
|
+
// File: src/utils/convert-related-person.ts
|
|
3
|
+
import { RelatedPersonClaim } from '../models/interoperable-claims/related-person-claims.js';
|
|
4
|
+
import { codingFromValue, codingToValue, referenceToValue } from './convert-shared.js';
|
|
5
|
+
export function relatedPersonFlatToFhirR4(claims) {
|
|
6
|
+
return {
|
|
7
|
+
resourceType: 'RelatedPerson',
|
|
8
|
+
identifier: claims[RelatedPersonClaim.Identifier] ? [{ value: claims[RelatedPersonClaim.Identifier] }] : undefined,
|
|
9
|
+
active: claims[RelatedPersonClaim.Active] === undefined ? undefined : claims[RelatedPersonClaim.Active] === 'true',
|
|
10
|
+
patient: claims[RelatedPersonClaim.Patient] ? { reference: claims[RelatedPersonClaim.Patient] } : undefined,
|
|
11
|
+
relationship: claims[RelatedPersonClaim.Relationship] ? [{ coding: codingFromValue(claims[RelatedPersonClaim.Relationship]) }] : undefined,
|
|
12
|
+
name: claims[RelatedPersonClaim.Name] ? [{ text: claims[RelatedPersonClaim.Name] }] : undefined,
|
|
13
|
+
telecom: claims[RelatedPersonClaim.Telecom] ? [{ value: claims[RelatedPersonClaim.Telecom] }] : undefined,
|
|
14
|
+
gender: claims[RelatedPersonClaim.Gender],
|
|
15
|
+
birthDate: claims[RelatedPersonClaim.BirthDate],
|
|
16
|
+
address: claims[RelatedPersonClaim.Address] ? [{ text: claims[RelatedPersonClaim.Address] }] : undefined,
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
export function relatedPersonFhirR4ToFlat(resource) {
|
|
20
|
+
return {
|
|
21
|
+
[RelatedPersonClaim.Identifier]: resource.identifier?.[0]?.value,
|
|
22
|
+
[RelatedPersonClaim.Active]: resource.active === undefined ? undefined : String(resource.active),
|
|
23
|
+
[RelatedPersonClaim.Patient]: referenceToValue(resource.patient),
|
|
24
|
+
[RelatedPersonClaim.Relationship]: codingToValue(resource.relationship?.[0]?.coding?.[0]),
|
|
25
|
+
[RelatedPersonClaim.Name]: resource.name?.[0]?.text,
|
|
26
|
+
[RelatedPersonClaim.Telecom]: resource.telecom?.[0]?.value,
|
|
27
|
+
[RelatedPersonClaim.Gender]: resource.gender,
|
|
28
|
+
[RelatedPersonClaim.BirthDate]: resource.birthDate,
|
|
29
|
+
[RelatedPersonClaim.Address]: resource.address?.[0]?.text,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export type FlatClaims = Record<string, string | undefined>;
|
|
2
|
+
export type FhirResource = Record<string, unknown> & {
|
|
3
|
+
resourceType: string;
|
|
4
|
+
};
|
|
5
|
+
export declare function isPlainObject(value: unknown): value is Record<string, unknown>;
|
|
6
|
+
export declare function codingFromValue(value?: string): Array<{
|
|
7
|
+
system?: string;
|
|
8
|
+
code: string;
|
|
9
|
+
}> | undefined;
|
|
10
|
+
export declare function codingToValue(coding?: {
|
|
11
|
+
system?: string;
|
|
12
|
+
code?: string;
|
|
13
|
+
}): string | undefined;
|
|
14
|
+
export declare function referenceToValue(reference?: {
|
|
15
|
+
reference?: string;
|
|
16
|
+
}): string | undefined;
|
|
17
|
+
export declare function referenceListToCsv(references?: Array<{
|
|
18
|
+
reference?: string;
|
|
19
|
+
}>): string | undefined;
|
|
20
|
+
export declare function codingListToCsv(codings?: Array<{
|
|
21
|
+
system?: string;
|
|
22
|
+
code?: string;
|
|
23
|
+
}>): string | undefined;
|
|
24
|
+
export declare function requireClaim(claims: FlatClaims, key: string): string;
|
|
25
|
+
export declare function requireSubjectIdentifier(value: string, key: string): void;
|
|
26
|
+
export declare function requireDidWeb(value: string, key: string): void;
|
|
27
|
+
/**
|
|
28
|
+
* Generic structural fallback for unsupported resources.
|
|
29
|
+
*/
|
|
30
|
+
export declare function fhirResourceToFlatClaims(resource: FhirResource, context?: string): FlatClaims;
|
|
31
|
+
/**
|
|
32
|
+
* Generic structural regeneration for unsupported resources.
|
|
33
|
+
*/
|
|
34
|
+
export declare function flatClaimsToFhirResource(claims: FlatClaims): FhirResource;
|