fhir-data-utils-ts 0.2.4 → 0.3.2

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 (285) hide show
  1. package/.codex/skills/govern-fhir-data-utilities/SKILL.md +58 -0
  2. package/.codex/skills/govern-fhir-data-utilities/agents/openai.yaml +4 -0
  3. package/.codex/skills/govern-fhir-observation-components/SKILL.md +18 -0
  4. package/CHANGELOG.md +39 -0
  5. package/README.md +47 -0
  6. package/dist/builders/immunization-graph.d.ts +36 -0
  7. package/dist/builders/immunization-graph.js +115 -0
  8. package/dist/builders/immunization-reminders.d.ts +35 -0
  9. package/dist/builders/immunization-reminders.js +104 -0
  10. package/dist/builders/index.d.ts +2 -0
  11. package/dist/builders/index.js +2 -0
  12. package/dist/claim-helpers/claim-list-helpers.d.ts +21 -0
  13. package/dist/claim-helpers/claim-list-helpers.js +54 -0
  14. package/dist/claim-helpers/claims-helpers-allergy-intolerance.d.ts +18 -0
  15. package/dist/claim-helpers/claims-helpers-allergy-intolerance.js +65 -0
  16. package/dist/claim-helpers/claims-helpers-appointment-response.d.ts +8 -0
  17. package/dist/claim-helpers/claims-helpers-appointment-response.js +20 -0
  18. package/dist/claim-helpers/claims-helpers-appointment.d.ts +10 -0
  19. package/dist/claim-helpers/claims-helpers-appointment.js +26 -0
  20. package/dist/claim-helpers/claims-helpers-care-plan.d.ts +8 -0
  21. package/dist/claim-helpers/claims-helpers-care-plan.js +20 -0
  22. package/dist/claim-helpers/claims-helpers-clinical-impression.d.ts +10 -0
  23. package/dist/claim-helpers/claims-helpers-clinical-impression.js +26 -0
  24. package/dist/claim-helpers/claims-helpers-communication.d.ts +19 -0
  25. package/dist/claim-helpers/claims-helpers-communication.js +63 -0
  26. package/dist/claim-helpers/claims-helpers-composition.d.ts +12 -0
  27. package/dist/claim-helpers/claims-helpers-composition.js +32 -0
  28. package/dist/claim-helpers/claims-helpers-condition.d.ts +18 -0
  29. package/dist/claim-helpers/claims-helpers-condition.js +65 -0
  30. package/dist/claim-helpers/claims-helpers-coverage.d.ts +10 -0
  31. package/dist/claim-helpers/claims-helpers-coverage.js +26 -0
  32. package/dist/claim-helpers/claims-helpers-device-use-statement.d.ts +8 -0
  33. package/dist/claim-helpers/claims-helpers-device-use-statement.js +20 -0
  34. package/dist/claim-helpers/claims-helpers-device.d.ts +8 -0
  35. package/dist/claim-helpers/claims-helpers-device.js +20 -0
  36. package/dist/claim-helpers/claims-helpers-diagnostic-report.d.ts +16 -0
  37. package/dist/claim-helpers/claims-helpers-diagnostic-report.js +47 -0
  38. package/dist/claim-helpers/claims-helpers-document-reference.d.ts +8 -0
  39. package/dist/claim-helpers/claims-helpers-document-reference.js +20 -0
  40. package/dist/claim-helpers/claims-helpers-encounter.d.ts +10 -0
  41. package/dist/claim-helpers/claims-helpers-encounter.js +26 -0
  42. package/dist/claim-helpers/claims-helpers-flag.d.ts +8 -0
  43. package/dist/claim-helpers/claims-helpers-flag.js +20 -0
  44. package/dist/claim-helpers/claims-helpers-immunization.d.ts +8 -0
  45. package/dist/claim-helpers/claims-helpers-immunization.js +20 -0
  46. package/dist/claim-helpers/claims-helpers-location.d.ts +10 -0
  47. package/dist/claim-helpers/claims-helpers-location.js +26 -0
  48. package/dist/claim-helpers/claims-helpers-medication-statement.d.ts +96 -0
  49. package/dist/claim-helpers/claims-helpers-medication-statement.js +278 -0
  50. package/dist/claim-helpers/claims-helpers-observation.d.ts +8 -0
  51. package/dist/claim-helpers/claims-helpers-observation.js +20 -0
  52. package/dist/claim-helpers/claims-helpers-organization.d.ts +12 -0
  53. package/dist/claim-helpers/claims-helpers-organization.js +32 -0
  54. package/dist/claim-helpers/claims-helpers-procedure.d.ts +8 -0
  55. package/dist/claim-helpers/claims-helpers-procedure.js +20 -0
  56. package/dist/claim-helpers/claims-helpers-related-person.d.ts +22 -0
  57. package/dist/claim-helpers/claims-helpers-related-person.js +53 -0
  58. package/dist/claim-helpers/index.d.ts +23 -0
  59. package/dist/claim-helpers/index.js +23 -0
  60. package/dist/claims/allergy-intolerance-claims.d.ts +153 -0
  61. package/dist/claims/allergy-intolerance-claims.js +194 -0
  62. package/dist/claims/appointment-claims.d.ts +226 -0
  63. package/dist/claims/appointment-claims.js +218 -0
  64. package/dist/claims/appointment-response-claims.d.ts +63 -0
  65. package/dist/claims/appointment-response-claims.js +58 -0
  66. package/dist/claims/care-plan-claims.d.ts +37 -0
  67. package/dist/claims/care-plan-claims.js +59 -0
  68. package/dist/claims/claim-types.d.ts +9 -0
  69. package/dist/claims/claim-types.js +3 -0
  70. package/dist/claims/clinical-impression-claims.d.ts +17 -0
  71. package/dist/claims/clinical-impression-claims.js +30 -0
  72. package/dist/claims/communication-claims.d.ts +55 -0
  73. package/dist/claims/communication-claims.js +57 -0
  74. package/dist/claims/composition-claims.d.ts +27 -0
  75. package/dist/claims/composition-claims.js +27 -0
  76. package/dist/claims/condition-claims.d.ts +79 -0
  77. package/dist/claims/condition-claims.js +104 -0
  78. package/dist/claims/consent-claims.d.ts +195 -0
  79. package/dist/claims/consent-claims.js +74 -0
  80. package/dist/claims/coverage-claims.d.ts +16 -0
  81. package/dist/claims/coverage-claims.js +28 -0
  82. package/dist/claims/device-claims.d.ts +20 -0
  83. package/dist/claims/device-claims.js +36 -0
  84. package/dist/claims/device-use-statement-claims.d.ts +17 -0
  85. package/dist/claims/device-use-statement-claims.js +28 -0
  86. package/dist/claims/diagnostic-report-claims.d.ts +109 -0
  87. package/dist/claims/diagnostic-report-claims.js +120 -0
  88. package/dist/claims/document-reference-claims.d.ts +39 -0
  89. package/dist/claims/document-reference-claims.js +96 -0
  90. package/dist/claims/encounter-claims.d.ts +18 -0
  91. package/dist/claims/encounter-claims.js +32 -0
  92. package/dist/claims/flag-claims.d.ts +19 -0
  93. package/dist/claims/flag-claims.js +33 -0
  94. package/dist/claims/immunization-claims.d.ts +31 -0
  95. package/dist/claims/immunization-claims.js +54 -0
  96. package/dist/claims/immunization-recommendation-claims.d.ts +19 -0
  97. package/dist/claims/immunization-recommendation-claims.js +26 -0
  98. package/dist/claims/index.d.ts +29 -0
  99. package/dist/claims/index.js +29 -0
  100. package/dist/claims/invoice-claims.d.ts +277 -0
  101. package/dist/claims/invoice-claims.js +357 -0
  102. package/dist/claims/location-claims.d.ts +22 -0
  103. package/dist/claims/location-claims.js +34 -0
  104. package/dist/claims/medication-claims.d.ts +15 -0
  105. package/dist/claims/medication-claims.js +23 -0
  106. package/dist/claims/medication-statement-claims.d.ts +539 -0
  107. package/dist/claims/medication-statement-claims.js +469 -0
  108. package/dist/claims/organization-claims.d.ts +18 -0
  109. package/dist/claims/organization-claims.js +27 -0
  110. package/dist/claims/practitioner-role-claims.d.ts +18 -0
  111. package/dist/claims/practitioner-role-claims.js +33 -0
  112. package/dist/claims/procedure-claims.d.ts +24 -0
  113. package/dist/claims/procedure-claims.js +44 -0
  114. package/dist/claims/related-person-claims.d.ts +30 -0
  115. package/dist/claims/related-person-claims.js +44 -0
  116. package/dist/claims/research-subject-claims.d.ts +4 -0
  117. package/dist/claims/research-subject-claims.js +4 -0
  118. package/dist/claims/task-claims.d.ts +61 -0
  119. package/dist/claims/task-claims.js +64 -0
  120. package/dist/clinical-terminology.d.ts +73 -0
  121. package/dist/clinical-terminology.js +77 -0
  122. package/dist/constants/clinical-statuses.d.ts +102 -0
  123. package/dist/constants/clinical-statuses.js +93 -0
  124. package/dist/constants/fhir-code-systems.d.ts +15 -0
  125. package/dist/constants/fhir-code-systems.js +15 -0
  126. package/dist/constants/fhir-resource-types.d.ts +162 -0
  127. package/dist/constants/fhir-resource-types.js +70 -0
  128. package/dist/constants/fhir-versions.d.ts +10 -0
  129. package/dist/constants/fhir-versions.js +10 -0
  130. package/dist/constants/index.d.ts +4 -0
  131. package/dist/constants/index.js +4 -0
  132. package/dist/converters/convert-allergy-intolerance.d.ts +3 -0
  133. package/dist/converters/convert-allergy-intolerance.js +85 -0
  134. package/dist/converters/convert-appointment-response.d.ts +3 -0
  135. package/dist/converters/convert-appointment-response.js +32 -0
  136. package/dist/converters/convert-appointment.d.ts +3 -0
  137. package/dist/converters/convert-appointment.js +61 -0
  138. package/dist/converters/convert-care-plan.d.ts +3 -0
  139. package/dist/converters/convert-care-plan.js +93 -0
  140. package/dist/converters/convert-clinical-impression.d.ts +3 -0
  141. package/dist/converters/convert-clinical-impression.js +42 -0
  142. package/dist/converters/convert-composition.d.ts +3 -0
  143. package/dist/converters/convert-composition.js +70 -0
  144. package/dist/converters/convert-condition.d.ts +3 -0
  145. package/dist/converters/convert-condition.js +51 -0
  146. package/dist/converters/convert-consent.d.ts +9 -0
  147. package/dist/converters/convert-consent.js +174 -0
  148. package/dist/converters/convert-coverage.d.ts +3 -0
  149. package/dist/converters/convert-coverage.js +51 -0
  150. package/dist/converters/convert-device-use-statement.d.ts +3 -0
  151. package/dist/converters/convert-device-use-statement.js +36 -0
  152. package/dist/converters/convert-device.d.ts +3 -0
  153. package/dist/converters/convert-device.js +48 -0
  154. package/dist/converters/convert-diagnostic-report.d.ts +3 -0
  155. package/dist/converters/convert-diagnostic-report.js +63 -0
  156. package/dist/converters/convert-document-reference.d.ts +3 -0
  157. package/dist/converters/convert-document-reference.js +54 -0
  158. package/dist/converters/convert-encounter.d.ts +3 -0
  159. package/dist/converters/convert-encounter.js +68 -0
  160. package/dist/converters/convert-flag.d.ts +3 -0
  161. package/dist/converters/convert-flag.js +42 -0
  162. package/dist/converters/convert-immunization.d.ts +3 -0
  163. package/dist/converters/convert-immunization.js +80 -0
  164. package/dist/converters/convert-location.d.ts +3 -0
  165. package/dist/converters/convert-location.js +44 -0
  166. package/dist/converters/convert-medication-statement.d.ts +3 -0
  167. package/dist/converters/convert-medication-statement.js +142 -0
  168. package/dist/converters/convert-observation.d.ts +33 -0
  169. package/dist/converters/convert-observation.js +246 -0
  170. package/dist/converters/convert-organization.d.ts +3 -0
  171. package/dist/converters/convert-organization.js +39 -0
  172. package/dist/converters/convert-practitioner-role.d.ts +3 -0
  173. package/dist/converters/convert-practitioner-role.js +62 -0
  174. package/dist/converters/convert-procedure.d.ts +3 -0
  175. package/dist/converters/convert-procedure.js +64 -0
  176. package/dist/converters/convert-related-person.d.ts +3 -0
  177. package/dist/converters/convert-related-person.js +31 -0
  178. package/dist/converters/convert-shared.d.ts +38 -0
  179. package/dist/converters/convert-shared.js +190 -0
  180. package/dist/converters/index.d.ts +24 -0
  181. package/dist/converters/index.js +24 -0
  182. package/dist/fhir-bundle.d.ts +9 -0
  183. package/dist/fhir-bundle.js +43 -0
  184. package/dist/fhir-search-parameters.d.ts +18 -0
  185. package/dist/fhir-search-parameters.js +52 -0
  186. package/dist/fhir-tokens.d.ts +11 -0
  187. package/dist/fhir-tokens.js +26 -0
  188. package/dist/fhir-types.d.ts +77 -0
  189. package/dist/fhir-types.js +1 -0
  190. package/dist/fhir-values.d.ts +13 -0
  191. package/dist/fhir-values.js +53 -0
  192. package/dist/group-r5.d.ts +121 -0
  193. package/dist/group-r5.js +301 -0
  194. package/dist/imaging-types.d.ts +30 -0
  195. package/dist/imaging-types.js +1 -0
  196. package/dist/immunization-flat-claims.d.ts +2 -0
  197. package/dist/immunization-flat-claims.js +2 -0
  198. package/dist/immunization-reminder-plan.d.ts +2 -0
  199. package/dist/immunization-reminder-plan.js +2 -0
  200. package/dist/index.d.ts +19 -0
  201. package/dist/index.js +19 -0
  202. package/dist/observation-claims.d.ts +170 -0
  203. package/dist/observation-claims.js +184 -0
  204. package/dist/related-person.d.ts +16 -0
  205. package/dist/related-person.js +14 -0
  206. package/dist/research-study-r5.d.ts +163 -0
  207. package/dist/research-study-r5.js +490 -0
  208. package/dist/search-models/index.d.ts +7 -0
  209. package/dist/search-models/index.js +7 -0
  210. package/dist/search-models/params/AdverseEvent.params.model.d.ts +14 -0
  211. package/dist/search-models/params/AdverseEvent.params.model.js +16 -0
  212. package/dist/search-models/params/AllergyIntolerance.params.model.d.ts +24 -0
  213. package/dist/search-models/params/AllergyIntolerance.params.model.js +27 -0
  214. package/dist/search-models/params/Appointment.params.model.d.ts +12 -0
  215. package/dist/search-models/params/Appointment.params.model.js +14 -0
  216. package/dist/search-models/params/ClinicalImpression.params.model.d.ts +14 -0
  217. package/dist/search-models/params/ClinicalImpression.params.model.js +15 -0
  218. package/dist/search-models/params/Condition.params.model.d.ts +16 -0
  219. package/dist/search-models/params/Condition.params.model.js +17 -0
  220. package/dist/search-models/params/DetectedIssue.params.model.d.ts +9 -0
  221. package/dist/search-models/params/DetectedIssue.params.model.js +11 -0
  222. package/dist/search-models/params/DiagnosticReport.params.model.d.ts +13 -0
  223. package/dist/search-models/params/DiagnosticReport.params.model.js +14 -0
  224. package/dist/search-models/params/Encounter.params.model.d.ts +15 -0
  225. package/dist/search-models/params/Encounter.params.model.js +17 -0
  226. package/dist/search-models/params/Immunization.params.model.d.ts +14 -0
  227. package/dist/search-models/params/Immunization.params.model.js +16 -0
  228. package/dist/search-models/params/Medication.params.model.d.ts +35 -0
  229. package/dist/search-models/params/Medication.params.model.js +45 -0
  230. package/dist/search-models/params/Observation.params.model.d.ts +326 -0
  231. package/dist/search-models/params/Observation.params.model.js +244 -0
  232. package/dist/search-models/params/Procedure.params.model.d.ts +15 -0
  233. package/dist/search-models/params/Procedure.params.model.js +17 -0
  234. package/dist/search-models/params/Search.params.model.d.ts +75 -0
  235. package/dist/search-models/params/Search.params.model.js +69 -0
  236. package/dist/search-models/params/ServiceRequest.params.model.d.ts +14 -0
  237. package/dist/search-models/params/ServiceRequest.params.model.js +16 -0
  238. package/dist/search-models/params/Specimen.params.model.d.ts +10 -0
  239. package/dist/search-models/params/Specimen.params.model.js +12 -0
  240. package/dist/search-models/params/index.d.ts +15 -0
  241. package/dist/search-models/params/index.js +15 -0
  242. package/dist/search-models/templates/AdverseEvent.template.model.d.ts +16 -0
  243. package/dist/search-models/templates/AdverseEvent.template.model.js +2 -0
  244. package/dist/search-models/templates/AllergyIntolerance.template.model.d.ts +24 -0
  245. package/dist/search-models/templates/AllergyIntolerance.template.model.js +1 -0
  246. package/dist/search-models/templates/Appointment.template.model.d.ts +13 -0
  247. package/dist/search-models/templates/Appointment.template.model.js +1 -0
  248. package/dist/search-models/templates/ClinicalImpression.template.model.d.ts +16 -0
  249. package/dist/search-models/templates/ClinicalImpression.template.model.js +1 -0
  250. package/dist/search-models/templates/Condition.template.model.d.ts +18 -0
  251. package/dist/search-models/templates/Condition.template.model.js +1 -0
  252. package/dist/search-models/templates/DetectedIssue.template.model.d.ts +11 -0
  253. package/dist/search-models/templates/DetectedIssue.template.model.js +1 -0
  254. package/dist/search-models/templates/DiagnosticReport.template.model.d.ts +15 -0
  255. package/dist/search-models/templates/DiagnosticReport.template.model.js +1 -0
  256. package/dist/search-models/templates/Encounter.template.model.d.ts +17 -0
  257. package/dist/search-models/templates/Encounter.template.model.js +1 -0
  258. package/dist/search-models/templates/Immunization.template.model.d.ts +18 -0
  259. package/dist/search-models/templates/Immunization.template.model.js +2 -0
  260. package/dist/search-models/templates/Medication.template.model.d.ts +37 -0
  261. package/dist/search-models/templates/Medication.template.model.js +1 -0
  262. package/dist/search-models/templates/Observation.template.model.d.ts +18 -0
  263. package/dist/search-models/templates/Observation.template.model.js +1 -0
  264. package/dist/search-models/templates/Procedure.template.model.d.ts +17 -0
  265. package/dist/search-models/templates/Procedure.template.model.js +1 -0
  266. package/dist/search-models/templates/ServiceRequest.template.model.d.ts +16 -0
  267. package/dist/search-models/templates/ServiceRequest.template.model.js +1 -0
  268. package/dist/search-models/templates/Specimen.template.model.d.ts +12 -0
  269. package/dist/search-models/templates/Specimen.template.model.js +1 -0
  270. package/dist/search-models/templates/index.d.ts +14 -0
  271. package/dist/search-models/templates/index.js +14 -0
  272. package/dist/terminology-models/AtcModel.d.ts +15 -0
  273. package/dist/terminology-models/AtcModel.js +2 -0
  274. package/dist/terminology-models/CommonModels.d.ts +70 -0
  275. package/dist/terminology-models/CommonModels.js +55 -0
  276. package/dist/terminology-models/FhirModels.d.ts +60 -0
  277. package/dist/terminology-models/FhirModels.js +34 -0
  278. package/dist/terminology-models/LoincModels.d.ts +24 -0
  279. package/dist/terminology-models/LoincModels.js +2 -0
  280. package/dist/terminology-models/SnomedModels.d.ts +13 -0
  281. package/dist/terminology-models/SnomedModels.js +2 -0
  282. package/dist/terminology-models/index.d.ts +6 -0
  283. package/dist/terminology-models/index.js +6 -0
  284. package/docs/UHC_FHIR_UTILS_MIGRATION.md +51 -8
  285. package/package.json +83 -2
@@ -0,0 +1,121 @@
1
+ /**
2
+ * Browser-safe FHIR R5 Group contract for research-team descriptions.
3
+ *
4
+ * Group membership is descriptive. It never grants authorization, permission
5
+ * or a SMART scope; those decisions remain separate Consent and credential
6
+ * contracts.
7
+ *
8
+ * @see https://hl7.org/fhir/R5/group.html
9
+ * @see https://hl7.org/fhir/R5/group-search.html
10
+ */
11
+ export declare const GroupR5Version: "5.0.0";
12
+ export declare const GroupR5TypeSystem: "http://hl7.org/fhir/group-type";
13
+ export declare const GroupR5TypeCodes: readonly ["person", "animal", "practitioner", "device", "careteam", "healthcareservice", "location", "organization", "relatedperson", "specimen"];
14
+ export type GroupR5TypeCode = (typeof GroupR5TypeCodes)[number];
15
+ export declare const GroupR5MembershipSystem: "http://hl7.org/fhir/group-membership-basis";
16
+ export declare const GroupR5MembershipCodes: readonly ["definitional", "enumerated"];
17
+ export type GroupR5MembershipCode = (typeof GroupR5MembershipCodes)[number];
18
+ export declare const GroupR5Bindings: Readonly<{
19
+ readonly type: Readonly<{
20
+ valueSet: "http://hl7.org/fhir/ValueSet/group-type";
21
+ strength: "required";
22
+ }>;
23
+ readonly membership: Readonly<{
24
+ valueSet: "http://hl7.org/fhir/ValueSet/group-membership-basis";
25
+ strength: "required";
26
+ }>;
27
+ }>;
28
+ export type GroupSearchParameterType = 'composite' | 'reference' | 'string' | 'token';
29
+ export type GroupR5SearchParameter = Readonly<{
30
+ code: string;
31
+ type: GroupSearchParameterType;
32
+ expression: string;
33
+ components: readonly string[];
34
+ }>;
35
+ /** Exact resource-specific SearchParameters published by FHIR R5 5.0.0. */
36
+ export declare const GroupR5SearchParameterCatalog: readonly GroupR5SearchParameter[];
37
+ /** Canonical Group flat-claim names. Never repeat these storage keys as literals. */
38
+ export declare const GroupClaim: Readonly<{
39
+ readonly Characteristic: "Group.characteristic";
40
+ readonly CharacteristicReference: "Group.characteristic-reference";
41
+ readonly CharacteristicValue: "Group.characteristic-value";
42
+ readonly Code: "Group.code";
43
+ readonly Exclude: "Group.exclude";
44
+ readonly Identifier: "Group.identifier";
45
+ readonly ManagingEntity: "Group.managing-entity";
46
+ readonly Member: "Group.member";
47
+ readonly Membership: "Group.membership";
48
+ readonly Name: "Group.name";
49
+ readonly Type: "Group.type";
50
+ readonly Value: "Group.value";
51
+ }>;
52
+ declare const standardSearchClaims: readonly ("Group.characteristic" | "Group.code" | "Group.identifier" | "Group.membership" | "Group.name" | "Group.type" | "Group.characteristic-reference" | "Group.characteristic-value" | "Group.exclude" | "Group.managing-entity" | "Group.member" | "Group.value")[];
53
+ /** Canonical claims derived only from the official resource-specific catalogue. */
54
+ export declare const GroupFlatClaimCatalog: Readonly<{
55
+ standardSearch: readonly ("Group.characteristic" | "Group.code" | "Group.identifier" | "Group.membership" | "Group.name" | "Group.type" | "Group.characteristic-reference" | "Group.characteristic-value" | "Group.exclude" | "Group.managing-entity" | "Group.member" | "Group.value")[];
56
+ all: readonly ("Group.characteristic" | "Group.code" | "Group.identifier" | "Group.membership" | "Group.name" | "Group.type" | "Group.characteristic-reference" | "Group.characteristic-value" | "Group.exclude" | "Group.managing-entity" | "Group.member" | "Group.value")[];
57
+ }>;
58
+ export type GroupR5SearchClaim = (typeof standardSearchClaims)[number];
59
+ export type GroupR5SearchClaims = Readonly<Partial<Record<GroupR5SearchClaim, readonly string[]>>>;
60
+ export type GroupR5FlatClaimsResource = Readonly<{
61
+ resourceType: 'Group';
62
+ id: string;
63
+ meta: Readonly<{
64
+ claims: Readonly<Record<string, readonly string[]>>;
65
+ }>;
66
+ }>;
67
+ export type GroupR5Reference = Readonly<{
68
+ reference: string;
69
+ type?: string;
70
+ display?: string;
71
+ }>;
72
+ export type GroupR5Period = Readonly<{
73
+ start?: string;
74
+ end?: string;
75
+ }>;
76
+ export type GroupPractitionerRoleMember = Readonly<{
77
+ entity: Readonly<{
78
+ reference: `PractitionerRole/${string}`;
79
+ type: 'PractitionerRole';
80
+ display?: string;
81
+ }>;
82
+ period?: GroupR5Period;
83
+ inactive?: boolean;
84
+ }>;
85
+ export type GroupR5ResearchTeam = Readonly<Record<string, unknown> & {
86
+ resourceType: 'Group';
87
+ id?: string;
88
+ type: 'practitioner';
89
+ membership: 'enumerated';
90
+ member: readonly GroupPractitionerRoleMember[];
91
+ }>;
92
+ /**
93
+ * Normalizes the members used by an enumerated professional research team.
94
+ * Every entity is a native PractitionerRole reference; a Practitioner or an
95
+ * employee identifier cannot substitute for the registered role assignment.
96
+ */
97
+ export declare function normalizeGroupPractitionerRoleMembers(input: unknown): readonly GroupPractitionerRoleMember[];
98
+ /**
99
+ * Normalizes the Group profile used to describe an explicit professional
100
+ * ResearchStudy team. This data is descriptive and authorization-shaped
101
+ * properties are rejected at every depth.
102
+ */
103
+ export declare function normalizeGroupR5ResearchTeam(input: unknown): GroupR5ResearchTeam;
104
+ /**
105
+ * Projects all populated official resource-specific R5 Group SearchParameters
106
+ * into flat `resource.meta.claims`. A referenced characteristic is indexed by
107
+ * `characteristic-reference`, not as the token-valued `value` parameter.
108
+ *
109
+ * @see https://hl7.org/fhir/R5/group-search.html
110
+ */
111
+ export declare function projectGroupR5SearchClaims(input: unknown): GroupR5SearchClaims;
112
+ /** Projects native-shaped Group input to the claims-only GW persistence shape. */
113
+ export declare function projectGroupR5FlatClaimsResource(input: unknown): GroupR5FlatClaimsResource;
114
+ /** Projects one correlated claims-only GW resource per PractitionerRole member. */
115
+ export declare function projectGroupPractitionerRoleMemberFlatClaimResources(input: Readonly<{
116
+ groupId: string;
117
+ members: unknown;
118
+ }>): readonly GroupR5FlatClaimsResource[];
119
+ /** Validates and freezes a claims-only Group GW resource. */
120
+ export declare function normalizeGroupR5FlatClaimsResource(input: unknown): GroupR5FlatClaimsResource;
121
+ export {};
@@ -0,0 +1,301 @@
1
+ /**
2
+ * Browser-safe FHIR R5 Group contract for research-team descriptions.
3
+ *
4
+ * Group membership is descriptive. It never grants authorization, permission
5
+ * or a SMART scope; those decisions remain separate Consent and credential
6
+ * contracts.
7
+ *
8
+ * @see https://hl7.org/fhir/R5/group.html
9
+ * @see https://hl7.org/fhir/R5/group-search.html
10
+ */
11
+ export const GroupR5Version = '5.0.0';
12
+ export const GroupR5TypeSystem = 'http://hl7.org/fhir/group-type';
13
+ export const GroupR5TypeCodes = Object.freeze([
14
+ 'person',
15
+ 'animal',
16
+ 'practitioner',
17
+ 'device',
18
+ 'careteam',
19
+ 'healthcareservice',
20
+ 'location',
21
+ 'organization',
22
+ 'relatedperson',
23
+ 'specimen',
24
+ ]);
25
+ export const GroupR5MembershipSystem = 'http://hl7.org/fhir/group-membership-basis';
26
+ export const GroupR5MembershipCodes = Object.freeze(['definitional', 'enumerated']);
27
+ export const GroupR5Bindings = Object.freeze({
28
+ type: Object.freeze({
29
+ valueSet: 'http://hl7.org/fhir/ValueSet/group-type',
30
+ strength: 'required',
31
+ }),
32
+ membership: Object.freeze({
33
+ valueSet: 'http://hl7.org/fhir/ValueSet/group-membership-basis',
34
+ strength: 'required',
35
+ }),
36
+ });
37
+ const searchParameter = (code, type, expression, components = []) => Object.freeze({
38
+ code,
39
+ type,
40
+ expression,
41
+ components: Object.freeze([...components]),
42
+ });
43
+ /** Exact resource-specific SearchParameters published by FHIR R5 5.0.0. */
44
+ export const GroupR5SearchParameterCatalog = Object.freeze([
45
+ searchParameter('characteristic', 'token', 'Group.characteristic.code'),
46
+ searchParameter('characteristic-reference', 'reference', '(Group.characteristic.value.ofType(Reference))'),
47
+ searchParameter('characteristic-value', 'composite', 'Group.characteristic', [
48
+ 'http://hl7.org/fhir/SearchParameter/Group-characteristic',
49
+ 'http://hl7.org/fhir/SearchParameter/Group-value',
50
+ ]),
51
+ searchParameter('code', 'token', 'Group.code'),
52
+ searchParameter('exclude', 'token', 'Group.characteristic.exclude'),
53
+ searchParameter('identifier', 'token', 'Group.identifier'),
54
+ searchParameter('managing-entity', 'reference', 'Group.managingEntity'),
55
+ searchParameter('member', 'reference', 'Group.member.entity'),
56
+ searchParameter('membership', 'token', 'Group.membership'),
57
+ searchParameter('name', 'string', 'Group.name'),
58
+ searchParameter('type', 'token', 'Group.type'),
59
+ searchParameter('value', 'token', '(Group.characteristic.value.ofType(CodeableConcept)) | (Group.characteristic.value.ofType(boolean))'),
60
+ ]);
61
+ /** Canonical Group flat-claim names. Never repeat these storage keys as literals. */
62
+ export const GroupClaim = Object.freeze({
63
+ Characteristic: 'Group.characteristic',
64
+ CharacteristicReference: 'Group.characteristic-reference',
65
+ CharacteristicValue: 'Group.characteristic-value',
66
+ Code: 'Group.code',
67
+ Exclude: 'Group.exclude',
68
+ Identifier: 'Group.identifier',
69
+ ManagingEntity: 'Group.managing-entity',
70
+ Member: 'Group.member',
71
+ Membership: 'Group.membership',
72
+ Name: 'Group.name',
73
+ Type: 'Group.type',
74
+ Value: 'Group.value',
75
+ });
76
+ const standardSearchClaims = Object.freeze(Object.values(GroupClaim));
77
+ /** Canonical claims derived only from the official resource-specific catalogue. */
78
+ export const GroupFlatClaimCatalog = Object.freeze({
79
+ standardSearch: standardSearchClaims,
80
+ all: standardSearchClaims,
81
+ });
82
+ /**
83
+ * Normalizes the members used by an enumerated professional research team.
84
+ * Every entity is a native PractitionerRole reference; a Practitioner or an
85
+ * employee identifier cannot substitute for the registered role assignment.
86
+ */
87
+ export function normalizeGroupPractitionerRoleMembers(input) {
88
+ if (!Array.isArray(input))
89
+ throw new TypeError('group_members_invalid');
90
+ return Object.freeze(input.map((value, index) => {
91
+ if (!isRecord(value) || containsAuthorizationProperty(value)) {
92
+ throw new TypeError(containsAuthorizationProperty(value) ? 'group_authorization_property_forbidden' : `group_member_${index}_invalid`);
93
+ }
94
+ if (!isRecord(value.entity))
95
+ throw new TypeError(`group_member_${index}_practitioner_role_reference_invalid`);
96
+ const reference = optionalString(value.entity.reference);
97
+ const declaredType = optionalString(value.entity.type);
98
+ if (!reference || !/^PractitionerRole\/[A-Za-z0-9.-]{1,64}$/.test(reference) || (declaredType && declaredType !== 'PractitionerRole')) {
99
+ throw new TypeError(`group_member_${index}_practitioner_role_reference_invalid`);
100
+ }
101
+ const display = optionalString(value.entity.display);
102
+ const period = value.period === undefined ? undefined : normalizePeriod(value.period, index);
103
+ if (value.inactive !== undefined && typeof value.inactive !== 'boolean') {
104
+ throw new TypeError(`group_member_${index}_inactive_invalid`);
105
+ }
106
+ return Object.freeze({
107
+ entity: Object.freeze({
108
+ reference: reference,
109
+ type: 'PractitionerRole',
110
+ ...(display ? { display } : {}),
111
+ }),
112
+ ...(period ? { period } : {}),
113
+ ...(value.inactive !== undefined ? { inactive: value.inactive } : {}),
114
+ });
115
+ }));
116
+ }
117
+ /**
118
+ * Normalizes the Group profile used to describe an explicit professional
119
+ * ResearchStudy team. This data is descriptive and authorization-shaped
120
+ * properties are rejected at every depth.
121
+ */
122
+ export function normalizeGroupR5ResearchTeam(input) {
123
+ if (!isRecord(input) || input.resourceType !== 'Group')
124
+ throw new TypeError('group_resource_invalid');
125
+ if (containsAuthorizationProperty(input))
126
+ throw new TypeError('group_authorization_property_forbidden');
127
+ if (input.type !== 'practitioner')
128
+ throw new TypeError('group_research_team_type_invalid');
129
+ if (input.membership !== 'enumerated')
130
+ throw new TypeError('group_research_team_membership_invalid');
131
+ const member = normalizeGroupPractitionerRoleMembers(input.member);
132
+ return Object.freeze({ ...input, type: 'practitioner', membership: 'enumerated', member });
133
+ }
134
+ /**
135
+ * Projects all populated official resource-specific R5 Group SearchParameters
136
+ * into flat `resource.meta.claims`. A referenced characteristic is indexed by
137
+ * `characteristic-reference`, not as the token-valued `value` parameter.
138
+ *
139
+ * @see https://hl7.org/fhir/R5/group-search.html
140
+ */
141
+ export function projectGroupR5SearchClaims(input) {
142
+ if (!isRecord(input) || input.resourceType !== 'Group')
143
+ throw new TypeError('group_resource_invalid');
144
+ if (containsAuthorizationProperty(input))
145
+ throw new TypeError('group_authorization_property_forbidden');
146
+ if (!GroupR5TypeCodes.includes(input.type))
147
+ throw new TypeError('group_type_invalid');
148
+ if (!GroupR5MembershipCodes.includes(input.membership)) {
149
+ throw new TypeError('group_membership_invalid');
150
+ }
151
+ const characteristics = normalizeRecords(input.characteristic, 'group_characteristic_invalid');
152
+ const characteristicCodes = characteristics.flatMap(item => conceptTokens(item.code));
153
+ const characteristicValues = characteristics.flatMap(characteristicTokenValues);
154
+ const claims = {};
155
+ addClaim(claims, GroupClaim.Characteristic, characteristicCodes);
156
+ addClaim(claims, GroupClaim.CharacteristicReference, characteristics.flatMap(item => referenceTokens(item.valueReference)));
157
+ addClaim(claims, GroupClaim.CharacteristicValue, characteristics.flatMap(item => conceptTokens(item.code).flatMap(code => characteristicTokenValues(item).map(value => `${code}$${value}`))));
158
+ addClaim(claims, GroupClaim.Code, conceptTokens(input.code));
159
+ addClaim(claims, GroupClaim.Exclude, characteristics.flatMap(item => typeof item.exclude === 'boolean' ? [String(item.exclude)] : []));
160
+ addClaim(claims, GroupClaim.Identifier, identifierTokens(input.identifier));
161
+ addClaim(claims, GroupClaim.ManagingEntity, referenceTokens(input.managingEntity));
162
+ addClaim(claims, GroupClaim.Member, normalizeRecords(input.member, 'group_members_invalid').flatMap(item => referenceTokens(item.entity)));
163
+ addClaim(claims, GroupClaim.Membership, [input.membership]);
164
+ addClaim(claims, GroupClaim.Name, strings(input.name));
165
+ addClaim(claims, GroupClaim.Type, [input.type]);
166
+ addClaim(claims, GroupClaim.Value, characteristicValues);
167
+ return Object.freeze(claims);
168
+ }
169
+ /** Projects native-shaped Group input to the claims-only GW persistence shape. */
170
+ export function projectGroupR5FlatClaimsResource(input) {
171
+ if (!isRecord(input) || input.resourceType !== 'Group')
172
+ throw new TypeError('group_resource_invalid');
173
+ const id = fhirId(input.id, 'group_flat_resource_invalid');
174
+ if (Array.isArray(input.member) && input.member.length > 0)
175
+ throw new TypeError('group_members_require_separate_resources');
176
+ return normalizeGroupR5FlatClaimsResource({
177
+ resourceType: 'Group',
178
+ id,
179
+ meta: { claims: projectGroupR5SearchClaims(input) },
180
+ });
181
+ }
182
+ /** Projects one correlated claims-only GW resource per PractitionerRole member. */
183
+ export function projectGroupPractitionerRoleMemberFlatClaimResources(input) {
184
+ const id = fhirId(input.groupId, 'group_flat_resource_invalid');
185
+ const members = normalizeGroupPractitionerRoleMembers(input.members);
186
+ return Object.freeze(members.map(member => normalizeGroupR5FlatClaimsResource({
187
+ resourceType: 'Group',
188
+ id,
189
+ meta: {
190
+ claims: projectGroupR5SearchClaims({
191
+ resourceType: 'Group',
192
+ id,
193
+ type: 'practitioner',
194
+ membership: 'enumerated',
195
+ member: [member],
196
+ }),
197
+ },
198
+ })));
199
+ }
200
+ /** Validates and freezes a claims-only Group GW resource. */
201
+ export function normalizeGroupR5FlatClaimsResource(input) {
202
+ if (!isRecord(input)
203
+ || input.resourceType !== 'Group'
204
+ || Object.keys(input).some(key => !['resourceType', 'id', 'meta'].includes(key))) {
205
+ throw new TypeError('group_flat_resource_invalid');
206
+ }
207
+ const id = fhirId(input.id, 'group_flat_resource_invalid');
208
+ if (!isRecord(input.meta) || !isRecord(input.meta.claims))
209
+ throw new TypeError('group_flat_resource_invalid');
210
+ const claims = {};
211
+ for (const [name, rawValues] of Object.entries(input.meta.claims)) {
212
+ if (!GroupFlatClaimCatalog.all.includes(name)
213
+ || !Array.isArray(rawValues)
214
+ || rawValues.length === 0
215
+ || rawValues.some(value => typeof value !== 'string' || !value.trim())) {
216
+ throw new TypeError('group_flat_claim_invalid');
217
+ }
218
+ claims[name] = Object.freeze(rawValues.map(value => value.trim()));
219
+ }
220
+ return Object.freeze({ resourceType: 'Group', id, meta: Object.freeze({ claims: Object.freeze(claims) }) });
221
+ }
222
+ function addClaim(claims, name, values) {
223
+ const normalized = [...new Set(values.flatMap(value => strings(value)))];
224
+ if (normalized.length > 0)
225
+ claims[name] = Object.freeze(normalized);
226
+ }
227
+ function identifierTokens(value) {
228
+ return normalizeRecords(value, 'group_identifier_invalid').flatMap(identifier => {
229
+ const system = optionalString(identifier.system);
230
+ const identifierValue = optionalString(identifier.value);
231
+ return identifierValue ? [`${system ? `${system}|` : ''}${identifierValue}`] : [];
232
+ });
233
+ }
234
+ function conceptTokens(value) {
235
+ if (!isRecord(value))
236
+ return [];
237
+ const coding = normalizeRecords(value.coding, 'group_coding_invalid').flatMap(item => {
238
+ const system = optionalString(item.system);
239
+ const code = optionalString(item.code);
240
+ return code ? [`${system ? `${system}|` : ''}${code}`] : [];
241
+ });
242
+ return coding.length > 0 ? coding : strings(value.text);
243
+ }
244
+ function characteristicTokenValues(value) {
245
+ if (typeof value.valueBoolean === 'boolean')
246
+ return [String(value.valueBoolean)];
247
+ return conceptTokens(value.valueCodeableConcept);
248
+ }
249
+ function referenceTokens(value) {
250
+ return isRecord(value) ? strings(value.reference) : [];
251
+ }
252
+ function normalizeRecords(value, error) {
253
+ if (value === undefined)
254
+ return [];
255
+ if (!Array.isArray(value) || !value.every(isRecord))
256
+ throw new TypeError(error);
257
+ return value;
258
+ }
259
+ function normalizePeriod(value, index) {
260
+ if (!isRecord(value))
261
+ throw new TypeError(`group_member_${index}_period_invalid`);
262
+ const start = optionalString(value.start);
263
+ const end = optionalString(value.end);
264
+ if (!start && !end)
265
+ throw new TypeError(`group_member_${index}_period_invalid`);
266
+ if ((start && !isFhirDateTime(start)) || (end && !isFhirDateTime(end))) {
267
+ throw new TypeError(`group_member_${index}_period_invalid`);
268
+ }
269
+ if (start && end && Date.parse(end) < Date.parse(start))
270
+ throw new TypeError(`group_member_${index}_period_invalid`);
271
+ return Object.freeze({ ...(start ? { start } : {}), ...(end ? { end } : {}) });
272
+ }
273
+ function containsAuthorizationProperty(value, seen = new WeakSet()) {
274
+ if (!value || typeof value !== 'object')
275
+ return false;
276
+ if (seen.has(value))
277
+ return false;
278
+ seen.add(value);
279
+ if (Array.isArray(value))
280
+ return value.some(item => containsAuthorizationProperty(item, seen));
281
+ return Object.entries(value).some(([name, nested]) => ['authorization', 'permission', 'scope'].includes(name) || containsAuthorizationProperty(nested, seen));
282
+ }
283
+ function strings(value) {
284
+ const normalized = optionalString(value);
285
+ return normalized ? [normalized] : [];
286
+ }
287
+ function optionalString(value) {
288
+ return typeof value === 'string' && value.trim() ? value.trim() : undefined;
289
+ }
290
+ function isFhirDateTime(value) {
291
+ return /^\d{4}(?:-(?:0[1-9]|1[0-2])(?:-(?:0[1-9]|[12]\d|3[01])(?:T.+)?)?)?$/.test(value);
292
+ }
293
+ function isRecord(value) {
294
+ return Boolean(value) && typeof value === 'object' && !Array.isArray(value);
295
+ }
296
+ function fhirId(value, error) {
297
+ const id = optionalString(value);
298
+ if (!id || !/^[A-Za-z0-9.-]{1,64}$/.test(id))
299
+ throw new TypeError(error);
300
+ return id;
301
+ }
@@ -0,0 +1,30 @@
1
+ /** Type-only DICOMDIR tree contract recovered from the retired UHC package. */
2
+ export interface DicomDirectoryNode {
3
+ id: string;
4
+ uid: string;
5
+ key: string;
6
+ expanded?: boolean;
7
+ }
8
+ export interface DicomDirectoryPatient extends DicomDirectoryNode {
9
+ value: string;
10
+ children?: DicomDirectoryStudy[];
11
+ }
12
+ export interface DicomDirectoryStudy extends DicomDirectoryNode {
13
+ description: string;
14
+ numberOfSeries?: number;
15
+ numberOfInstances?: number;
16
+ value: string;
17
+ children?: DicomDirectorySeries[];
18
+ }
19
+ export interface DicomDirectorySeries extends DicomDirectoryNode {
20
+ description: string;
21
+ number: number;
22
+ value: string;
23
+ children?: DicomDirectoryInstance[];
24
+ }
25
+ export interface DicomDirectoryInstance extends DicomDirectoryNode {
26
+ number: number;
27
+ path: string;
28
+ sopClassUID: string;
29
+ value: string;
30
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,2 @@
1
+ /** @deprecated Import from `fhir-data-utils-ts/builders/immunization`. */
2
+ export * from './builders/immunization-graph.js';
@@ -0,0 +1,2 @@
1
+ /** @deprecated Import from `fhir-data-utils-ts/builders/immunization`. */
2
+ export * from './builders/immunization-graph.js';
@@ -0,0 +1,2 @@
1
+ /** @deprecated Import from `fhir-data-utils-ts/builders/immunization`. */
2
+ export * from './builders/immunization-reminders.js';
@@ -0,0 +1,2 @@
1
+ /** @deprecated Import from `fhir-data-utils-ts/builders/immunization`. */
2
+ export * from './builders/immunization-reminders.js';
package/dist/index.d.ts CHANGED
@@ -3,3 +3,22 @@ export * from './coding-review-flat-claims.js';
3
3
  export * from './search-parameters.js';
4
4
  export * from './observation-claims.js';
5
5
  export * from './vital-sign-observations.js';
6
+ export * from './claims/index.js';
7
+ export * from './claim-helpers/index.js';
8
+ export * from './converters/index.js';
9
+ export * from './fhir-types.js';
10
+ export * from './fhir-values.js';
11
+ export * from './fhir-search-parameters.js';
12
+ export * from './search-models/index.js';
13
+ export * from './fhir-bundle.js';
14
+ export * from './terminology-models/index.js';
15
+ export * from './constants/index.js';
16
+ export * from './clinical-terminology.js';
17
+ export * from './immunization-flat-claims.js';
18
+ export * from './immunization-reminder-plan.js';
19
+ export * from './builders/index.js';
20
+ export * from './group-r5.js';
21
+ export * from './research-study-r5.js';
22
+ export * from './fhir-tokens.js';
23
+ export * from './related-person.js';
24
+ export * from './imaging-types.js';
package/dist/index.js CHANGED
@@ -3,3 +3,22 @@ export * from './coding-review-flat-claims.js';
3
3
  export * from './search-parameters.js';
4
4
  export * from './observation-claims.js';
5
5
  export * from './vital-sign-observations.js';
6
+ export * from './claims/index.js';
7
+ export * from './claim-helpers/index.js';
8
+ export * from './converters/index.js';
9
+ export * from './fhir-types.js';
10
+ export * from './fhir-values.js';
11
+ export * from './fhir-search-parameters.js';
12
+ export * from './search-models/index.js';
13
+ export * from './fhir-bundle.js';
14
+ export * from './terminology-models/index.js';
15
+ export * from './constants/index.js';
16
+ export * from './clinical-terminology.js';
17
+ export * from './immunization-flat-claims.js';
18
+ export * from './immunization-reminder-plan.js';
19
+ export * from './builders/index.js';
20
+ export * from './group-r5.js';
21
+ export * from './research-study-r5.js';
22
+ export * from './fhir-tokens.js';
23
+ export * from './related-person.js';
24
+ export * from './imaging-types.js';