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.
Files changed (255) hide show
  1. package/README.md +54 -1
  2. package/dist/claims/claim-list-helpers.d.ts +21 -0
  3. package/dist/claims/claim-list-helpers.js +50 -0
  4. package/dist/claims/claims-helpers-allergy-intolerance.d.ts +10 -0
  5. package/dist/claims/claims-helpers-allergy-intolerance.js +47 -0
  6. package/dist/claims/claims-helpers-appointment-response.d.ts +8 -0
  7. package/dist/claims/claims-helpers-appointment-response.js +20 -0
  8. package/dist/claims/claims-helpers-appointment.d.ts +10 -0
  9. package/dist/claims/claims-helpers-appointment.js +26 -0
  10. package/dist/claims/claims-helpers-care-plan.d.ts +8 -0
  11. package/dist/claims/claims-helpers-care-plan.js +20 -0
  12. package/dist/claims/claims-helpers-clinical-impression.d.ts +10 -0
  13. package/dist/claims/claims-helpers-clinical-impression.js +26 -0
  14. package/dist/claims/claims-helpers-communication.d.ts +17 -0
  15. package/dist/claims/claims-helpers-communication.js +57 -0
  16. package/dist/claims/claims-helpers-composition.d.ts +12 -0
  17. package/dist/claims/claims-helpers-composition.js +32 -0
  18. package/dist/claims/claims-helpers-condition.d.ts +10 -0
  19. package/dist/claims/claims-helpers-condition.js +47 -0
  20. package/dist/claims/claims-helpers-consent.d.ts +112 -0
  21. package/dist/claims/claims-helpers-consent.js +271 -0
  22. package/dist/claims/claims-helpers-coverage.d.ts +10 -0
  23. package/dist/claims/claims-helpers-coverage.js +26 -0
  24. package/dist/claims/claims-helpers-device-use-statement.d.ts +8 -0
  25. package/dist/claims/claims-helpers-device-use-statement.js +20 -0
  26. package/dist/claims/claims-helpers-device.d.ts +8 -0
  27. package/dist/claims/claims-helpers-device.js +20 -0
  28. package/dist/claims/claims-helpers-diagnostic-report.d.ts +12 -0
  29. package/dist/claims/claims-helpers-diagnostic-report.js +32 -0
  30. package/dist/claims/claims-helpers-document-reference.d.ts +8 -0
  31. package/dist/claims/claims-helpers-document-reference.js +20 -0
  32. package/dist/claims/claims-helpers-encounter.d.ts +10 -0
  33. package/dist/claims/claims-helpers-encounter.js +26 -0
  34. package/dist/claims/claims-helpers-flag.d.ts +8 -0
  35. package/dist/claims/claims-helpers-flag.js +20 -0
  36. package/dist/claims/claims-helpers-immunization.d.ts +8 -0
  37. package/dist/claims/claims-helpers-immunization.js +20 -0
  38. package/dist/claims/claims-helpers-location.d.ts +10 -0
  39. package/dist/claims/claims-helpers-location.js +26 -0
  40. package/dist/claims/claims-helpers-medication-statement.d.ts +88 -0
  41. package/dist/claims/claims-helpers-medication-statement.js +259 -0
  42. package/dist/claims/claims-helpers-observation.d.ts +8 -0
  43. package/dist/claims/claims-helpers-observation.js +20 -0
  44. package/dist/claims/claims-helpers-organization.d.ts +12 -0
  45. package/dist/claims/claims-helpers-organization.js +32 -0
  46. package/dist/claims/claims-helpers-procedure.d.ts +8 -0
  47. package/dist/claims/claims-helpers-procedure.js +20 -0
  48. package/dist/claims/claims-helpers-related-person.d.ts +8 -0
  49. package/dist/claims/claims-helpers-related-person.js +20 -0
  50. package/dist/claims/index.d.ts +24 -0
  51. package/dist/claims/index.js +24 -0
  52. package/dist/constants/fhir-resource-types.d.ts +16 -0
  53. package/dist/constants/fhir-resource-types.js +8 -0
  54. package/dist/convert/convert-allergy-intolerance.d.ts +3 -0
  55. package/dist/convert/convert-allergy-intolerance.js +34 -0
  56. package/dist/convert/convert-appointment-response.d.ts +3 -0
  57. package/dist/convert/convert-appointment-response.js +32 -0
  58. package/dist/convert/convert-appointment.d.ts +3 -0
  59. package/dist/convert/convert-appointment.js +61 -0
  60. package/dist/convert/convert-care-plan.d.ts +3 -0
  61. package/dist/convert/convert-care-plan.js +58 -0
  62. package/dist/convert/convert-clinical-impression.d.ts +3 -0
  63. package/dist/convert/convert-clinical-impression.js +42 -0
  64. package/dist/convert/convert-composition.d.ts +3 -0
  65. package/dist/convert/convert-composition.js +35 -0
  66. package/dist/convert/convert-condition.d.ts +3 -0
  67. package/dist/convert/convert-condition.js +24 -0
  68. package/dist/convert/convert-coverage.d.ts +3 -0
  69. package/dist/convert/convert-coverage.js +51 -0
  70. package/dist/convert/convert-device-use-statement.d.ts +3 -0
  71. package/dist/convert/convert-device-use-statement.js +28 -0
  72. package/dist/convert/convert-device.d.ts +3 -0
  73. package/dist/convert/convert-device.js +37 -0
  74. package/dist/convert/convert-diagnostic-report.d.ts +3 -0
  75. package/dist/convert/convert-diagnostic-report.js +55 -0
  76. package/dist/convert/convert-document-reference.d.ts +3 -0
  77. package/dist/convert/convert-document-reference.js +35 -0
  78. package/dist/convert/convert-encounter.d.ts +3 -0
  79. package/dist/convert/convert-encounter.js +68 -0
  80. package/dist/convert/convert-flag.d.ts +3 -0
  81. package/dist/convert/convert-flag.js +34 -0
  82. package/dist/convert/convert-immunization.d.ts +3 -0
  83. package/dist/convert/convert-immunization.js +56 -0
  84. package/dist/convert/convert-location.d.ts +3 -0
  85. package/dist/convert/convert-location.js +44 -0
  86. package/dist/convert/convert-medication-statement.d.ts +3 -0
  87. package/dist/convert/convert-medication-statement.js +64 -0
  88. package/dist/convert/convert-observation.d.ts +3 -0
  89. package/dist/convert/convert-observation.js +57 -0
  90. package/dist/convert/convert-organization.d.ts +3 -0
  91. package/dist/convert/convert-organization.js +39 -0
  92. package/dist/convert/convert-procedure.d.ts +3 -0
  93. package/dist/convert/convert-procedure.js +50 -0
  94. package/dist/convert/convert-related-person.d.ts +3 -0
  95. package/dist/convert/convert-related-person.js +31 -0
  96. package/dist/convert/convert-shared.d.ts +34 -0
  97. package/dist/convert/convert-shared.js +179 -0
  98. package/dist/convert/index.d.ts +22 -0
  99. package/dist/convert/index.js +22 -0
  100. package/dist/examples/communication-bundle-session.js +2 -2
  101. package/dist/examples/shared.d.ts +19 -0
  102. package/dist/examples/shared.js +73 -0
  103. package/dist/index.d.ts +2 -0
  104. package/dist/index.js +2 -0
  105. package/dist/models/bundle.d.ts +13 -1
  106. package/dist/models/interoperable-claims/appointment-claims.d.ts +23 -1
  107. package/dist/models/interoperable-claims/appointment-claims.js +22 -1
  108. package/dist/models/interoperable-claims/appointment-response-claims.d.ts +14 -0
  109. package/dist/models/interoperable-claims/appointment-response-claims.js +13 -0
  110. package/dist/models/interoperable-claims/care-plan-claims.d.ts +24 -0
  111. package/dist/models/interoperable-claims/care-plan-claims.js +44 -0
  112. package/dist/models/interoperable-claims/clinical-impression-claims.d.ts +17 -0
  113. package/dist/models/interoperable-claims/clinical-impression-claims.js +30 -0
  114. package/dist/models/interoperable-claims/coverage-claims.d.ts +16 -0
  115. package/dist/models/interoperable-claims/coverage-claims.js +28 -0
  116. package/dist/models/interoperable-claims/device-claims.d.ts +18 -0
  117. package/dist/models/interoperable-claims/device-claims.js +32 -0
  118. package/dist/models/interoperable-claims/diagnostic-report-claims.d.ts +2 -2
  119. package/dist/models/interoperable-claims/diagnostic-report-claims.js +1 -1
  120. package/dist/models/interoperable-claims/encounter-claims.d.ts +18 -0
  121. package/dist/models/interoperable-claims/encounter-claims.js +32 -0
  122. package/dist/models/interoperable-claims/flag-claims.d.ts +16 -0
  123. package/dist/models/interoperable-claims/flag-claims.js +28 -0
  124. package/dist/models/interoperable-claims/immunization-claims.d.ts +23 -0
  125. package/dist/models/interoperable-claims/immunization-claims.js +42 -0
  126. package/dist/models/interoperable-claims/index.d.ts +12 -0
  127. package/dist/models/interoperable-claims/index.js +12 -0
  128. package/dist/models/interoperable-claims/location-claims.d.ts +22 -0
  129. package/dist/models/interoperable-claims/location-claims.js +34 -0
  130. package/dist/models/interoperable-claims/observation-claims.d.ts +26 -0
  131. package/dist/models/interoperable-claims/observation-claims.js +48 -0
  132. package/dist/models/interoperable-claims/organization-claims.d.ts +18 -0
  133. package/dist/models/interoperable-claims/organization-claims.js +27 -0
  134. package/dist/models/interoperable-claims/procedure-claims.d.ts +22 -0
  135. package/dist/models/interoperable-claims/procedure-claims.js +40 -0
  136. package/dist/models/interoperable-claims/related-person-claims.d.ts +14 -0
  137. package/dist/models/interoperable-claims/related-person-claims.js +24 -0
  138. package/dist/utils/appointment-claim-helpers.d.ts +10 -0
  139. package/dist/utils/appointment-claim-helpers.js +26 -0
  140. package/dist/utils/appointment-response-claim-helpers.d.ts +8 -0
  141. package/dist/utils/appointment-response-claim-helpers.js +20 -0
  142. package/dist/utils/bundle-document-builder.d.ts +36 -0
  143. package/dist/utils/bundle-document-builder.js +311 -0
  144. package/dist/utils/claims-helpers-allergy-intolerance.d.ts +1 -0
  145. package/dist/utils/claims-helpers-allergy-intolerance.js +1 -0
  146. package/dist/utils/claims-helpers-appointment-response.d.ts +1 -0
  147. package/dist/utils/claims-helpers-appointment-response.js +1 -0
  148. package/dist/utils/claims-helpers-appointment.d.ts +1 -0
  149. package/dist/utils/claims-helpers-appointment.js +1 -0
  150. package/dist/utils/claims-helpers-care-plan.d.ts +1 -0
  151. package/dist/utils/claims-helpers-care-plan.js +1 -0
  152. package/dist/utils/claims-helpers-clinical-impression.d.ts +1 -0
  153. package/dist/utils/claims-helpers-clinical-impression.js +1 -0
  154. package/dist/utils/claims-helpers-communication.d.ts +1 -0
  155. package/dist/utils/claims-helpers-communication.js +1 -0
  156. package/dist/utils/claims-helpers-composition.d.ts +1 -0
  157. package/dist/utils/claims-helpers-composition.js +1 -0
  158. package/dist/utils/claims-helpers-condition.d.ts +1 -0
  159. package/dist/utils/claims-helpers-condition.js +1 -0
  160. package/dist/utils/claims-helpers-consent.d.ts +1 -0
  161. package/dist/utils/claims-helpers-consent.js +1 -0
  162. package/dist/utils/claims-helpers-coverage.d.ts +1 -0
  163. package/dist/utils/claims-helpers-coverage.js +1 -0
  164. package/dist/utils/claims-helpers-device-use-statement.d.ts +1 -0
  165. package/dist/utils/claims-helpers-device-use-statement.js +1 -0
  166. package/dist/utils/claims-helpers-device.d.ts +1 -0
  167. package/dist/utils/claims-helpers-device.js +1 -0
  168. package/dist/utils/claims-helpers-diagnostic-report.d.ts +1 -0
  169. package/dist/utils/claims-helpers-diagnostic-report.js +1 -0
  170. package/dist/utils/claims-helpers-document-reference.d.ts +1 -0
  171. package/dist/utils/claims-helpers-document-reference.js +1 -0
  172. package/dist/utils/claims-helpers-encounter.d.ts +1 -0
  173. package/dist/utils/claims-helpers-encounter.js +1 -0
  174. package/dist/utils/claims-helpers-flag.d.ts +1 -0
  175. package/dist/utils/claims-helpers-flag.js +1 -0
  176. package/dist/utils/claims-helpers-immunization.d.ts +1 -0
  177. package/dist/utils/claims-helpers-immunization.js +1 -0
  178. package/dist/utils/claims-helpers-location.d.ts +1 -0
  179. package/dist/utils/claims-helpers-location.js +1 -0
  180. package/dist/utils/claims-helpers-medication-statement.d.ts +1 -0
  181. package/dist/utils/claims-helpers-medication-statement.js +1 -0
  182. package/dist/utils/claims-helpers-observation.d.ts +1 -0
  183. package/dist/utils/claims-helpers-observation.js +1 -0
  184. package/dist/utils/claims-helpers-organization.d.ts +1 -0
  185. package/dist/utils/claims-helpers-organization.js +1 -0
  186. package/dist/utils/claims-helpers-procedure.d.ts +1 -0
  187. package/dist/utils/claims-helpers-procedure.js +1 -0
  188. package/dist/utils/claims-helpers-related-person.d.ts +1 -0
  189. package/dist/utils/claims-helpers-related-person.js +1 -0
  190. package/dist/utils/clinical-impression-claim-helpers.d.ts +10 -0
  191. package/dist/utils/clinical-impression-claim-helpers.js +26 -0
  192. package/dist/utils/clinical-resource-converters.d.ts +91 -62
  193. package/dist/utils/clinical-resource-converters.js +135 -273
  194. package/dist/utils/communication-bundle-session.js +1 -1
  195. package/dist/utils/composition-claim-helpers.d.ts +12 -0
  196. package/dist/utils/composition-claim-helpers.js +32 -0
  197. package/dist/utils/consent-claim-helpers.d.ts +2 -2
  198. package/dist/utils/consent-claim-helpers.js +2 -2
  199. package/dist/utils/convert-allergy-intolerance.d.ts +3 -0
  200. package/dist/utils/convert-allergy-intolerance.js +34 -0
  201. package/dist/utils/convert-appointment-response.d.ts +3 -0
  202. package/dist/utils/convert-appointment-response.js +32 -0
  203. package/dist/utils/convert-appointment.d.ts +3 -0
  204. package/dist/utils/convert-appointment.js +61 -0
  205. package/dist/utils/convert-care-plan.d.ts +3 -0
  206. package/dist/utils/convert-care-plan.js +58 -0
  207. package/dist/utils/convert-clinical-impression.d.ts +3 -0
  208. package/dist/utils/convert-clinical-impression.js +42 -0
  209. package/dist/utils/convert-composition.d.ts +3 -0
  210. package/dist/utils/convert-composition.js +35 -0
  211. package/dist/utils/convert-condition.d.ts +3 -0
  212. package/dist/utils/convert-condition.js +24 -0
  213. package/dist/utils/convert-coverage.d.ts +3 -0
  214. package/dist/utils/convert-coverage.js +51 -0
  215. package/dist/utils/convert-device-use-statement.d.ts +3 -0
  216. package/dist/utils/convert-device-use-statement.js +28 -0
  217. package/dist/utils/convert-device.d.ts +3 -0
  218. package/dist/utils/convert-device.js +37 -0
  219. package/dist/utils/convert-diagnostic-report.d.ts +3 -0
  220. package/dist/utils/convert-diagnostic-report.js +55 -0
  221. package/dist/utils/convert-document-reference.d.ts +3 -0
  222. package/dist/utils/convert-document-reference.js +35 -0
  223. package/dist/utils/convert-encounter.d.ts +3 -0
  224. package/dist/utils/convert-encounter.js +68 -0
  225. package/dist/utils/convert-flag.d.ts +3 -0
  226. package/dist/utils/convert-flag.js +34 -0
  227. package/dist/utils/convert-immunization.d.ts +3 -0
  228. package/dist/utils/convert-immunization.js +56 -0
  229. package/dist/utils/convert-medication-statement.d.ts +3 -0
  230. package/dist/utils/convert-medication-statement.js +64 -0
  231. package/dist/utils/convert-observation.d.ts +3 -0
  232. package/dist/utils/convert-observation.js +57 -0
  233. package/dist/utils/convert-procedure.d.ts +3 -0
  234. package/dist/utils/convert-procedure.js +50 -0
  235. package/dist/utils/convert-related-person.d.ts +3 -0
  236. package/dist/utils/convert-related-person.js +31 -0
  237. package/dist/utils/convert-shared.d.ts +34 -0
  238. package/dist/utils/convert-shared.js +179 -0
  239. package/dist/utils/coverage-claim-helpers.d.ts +10 -0
  240. package/dist/utils/coverage-claim-helpers.js +26 -0
  241. package/dist/utils/diagnostic-report-claim-helpers.d.ts +12 -0
  242. package/dist/utils/diagnostic-report-claim-helpers.js +32 -0
  243. package/dist/utils/encounter-claim-helpers.d.ts +10 -0
  244. package/dist/utils/encounter-claim-helpers.js +26 -0
  245. package/dist/utils/fhir-cid.d.ts +49 -0
  246. package/dist/utils/fhir-cid.js +75 -0
  247. package/dist/utils/index.d.ts +4 -6
  248. package/dist/utils/index.js +4 -6
  249. package/dist/utils/ips-bundle-claims.d.ts +52 -0
  250. package/dist/utils/ips-bundle-claims.js +104 -0
  251. package/dist/utils/jwt.d.ts +16 -0
  252. package/dist/utils/jwt.js +21 -0
  253. package/dist/utils/related-person-claim-helpers.d.ts +8 -0
  254. package/dist/utils/related-person-claim-helpers.js +20 -0
  255. 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,3 @@
1
+ import type { FhirResource, FlatClaims } from './convert-shared';
2
+ export declare function allergyIntoleranceFlatToFhirR4(claims: FlatClaims): FhirResource;
3
+ export declare function allergyIntoleranceFhirR4ToFlat(resource: FhirResource): FlatClaims;
@@ -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,3 @@
1
+ import type { FhirResource, FlatClaims } from './convert-shared';
2
+ export declare function appointmentResponseFlatToFhirR4(claims: FlatClaims): FhirResource;
3
+ export declare function appointmentResponseFhirR4ToFlat(resource: FhirResource): FlatClaims;
@@ -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,3 @@
1
+ import type { FhirResource, FlatClaims } from './convert-shared';
2
+ export declare function appointmentFlatToFhirR4(claims: FlatClaims): FhirResource;
3
+ export declare function appointmentFhirR4ToFlat(resource: FhirResource): FlatClaims;
@@ -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,3 @@
1
+ import type { FhirResource, FlatClaims } from './convert-shared';
2
+ export declare function carePlanFlatToFhirR4(claims: FlatClaims): FhirResource;
3
+ export declare function carePlanFhirR4ToFlat(resource: FhirResource): FlatClaims;
@@ -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,3 @@
1
+ import type { FhirResource, FlatClaims } from './convert-shared';
2
+ export declare function clinicalImpressionFlatToFhirR4(claims: FlatClaims): FhirResource;
3
+ export declare function clinicalImpressionFhirR4ToFlat(resource: FhirResource): FlatClaims;
@@ -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,3 @@
1
+ import type { FhirResource, FlatClaims } from './convert-shared';
2
+ export declare function compositionFlatToFhirR4(claims: FlatClaims): FhirResource;
3
+ export declare function compositionFhirR4ToFlat(resource: FhirResource): FlatClaims;
@@ -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,3 @@
1
+ import type { FhirResource, FlatClaims } from './convert-shared';
2
+ export declare function conditionFlatToFhirR4(claims: FlatClaims): FhirResource;
3
+ export declare function conditionFhirR4ToFlat(resource: FhirResource): FlatClaims;
@@ -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,3 @@
1
+ import type { FhirResource, FlatClaims } from './convert-shared';
2
+ export declare function coverageFlatToFhirR4(claims: FlatClaims): FhirResource;
3
+ export declare function coverageFhirR4ToFlat(resource: FhirResource): FlatClaims;
@@ -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,3 @@
1
+ import type { FhirResource, FlatClaims } from './convert-shared';
2
+ export declare function deviceUseStatementFlatToFhirR4(claims: FlatClaims): FhirResource;
3
+ export declare function deviceUseStatementFhirR4ToFlat(resource: FhirResource): FlatClaims;
@@ -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,3 @@
1
+ import type { FhirResource, FlatClaims } from './convert-shared';
2
+ export declare function deviceFlatToFhirR4(claims: FlatClaims): FhirResource;
3
+ export declare function deviceFhirR4ToFlat(resource: FhirResource): FlatClaims;
@@ -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,3 @@
1
+ import type { FhirResource, FlatClaims } from './convert-shared';
2
+ export declare function diagnosticReportFlatToFhirR4(claims: FlatClaims): FhirResource;
3
+ export declare function diagnosticReportFhirR4ToFlat(resource: FhirResource): FlatClaims;
@@ -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
+ }
@@ -0,0 +1,3 @@
1
+ import type { FhirResource, FlatClaims } from './convert-shared';
2
+ export declare function documentReferenceFlatToFhirR4(claims: FlatClaims): FhirResource;
3
+ export declare function documentReferenceFhirR4ToFlat(resource: FhirResource): FlatClaims;