fhirsmith 0.8.6 → 0.9.1

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.
@@ -1,5 +1,6 @@
1
1
  const {VersionUtilities} = require("../../library/version-utilities");
2
2
  const {getValueName} = require("../../library/utilities");
3
+ const {Extensions} = require("../library/extensions");
3
4
 
4
5
  /**
5
6
  * Converts input ValueSet to R5 format (modifies input object for performance)
@@ -13,6 +14,12 @@ function valueSetToR5(jsonObj, sourceVersion) {
13
14
  if (VersionUtilities.isR5Ver(sourceVersion)) {
14
15
  return jsonObj; // No conversion needed
15
16
  }
17
+ for (const inc of jsonObj.compose.include || []) {
18
+ valueSetIncludeToR5(inc);
19
+ }
20
+ for (const inc of jsonObj.compose.exclude || []) {
21
+ valueSetIncludeToR5(inc);
22
+ }
16
23
  if (VersionUtilities.isR4Ver(sourceVersion)) {
17
24
  return jsonObj; // No conversion needed
18
25
  }
@@ -26,6 +33,19 @@ function valueSetToR5(jsonObj, sourceVersion) {
26
33
  throw new Error(`Unsupported FHIR version: ${sourceVersion}`);
27
34
  }
28
35
 
36
+ function valueSetIncludeToR5(inc) {
37
+ for (const filter of inc.filter || []) {
38
+ if (filter._op) {
39
+ let code = Extensions.readString(filter._op, 'http://hl7.org/fhir/5.0/StructureDefinition/extension-ValueSet.compose.include.filter.op');
40
+ if (code) {
41
+ filter.op = code;
42
+ delete filter._op;
43
+ }
44
+ }
45
+ }
46
+ }
47
+
48
+
29
49
  /**
30
50
  * Converts R5 ValueSet to target version format (clones object first)
31
51
  * @param {Object} r5Obj - The R5 format ValueSet object
@@ -70,8 +90,8 @@ function valueSetR5ToR4(r5Obj) {
70
90
  if (include.filter && Array.isArray(include.filter)) {
71
91
  include.filter = include.filter.map(filter => {
72
92
  if (filter.op && isR5OnlyFilterOperator(filter.op)) {
73
- // Remove R5-only operators
74
- return null;
93
+ filter._op = { "extension": "http://hl7.org/fhir/5.0/StructureDefinition/extension-ValueSet.compose.include.filter.op", "valueCode": filter.op}
94
+ delete filter.op;
75
95
  }
76
96
  return filter;
77
97
  }).filter(filter => filter !== null);
@@ -85,8 +105,8 @@ function valueSetR5ToR4(r5Obj) {
85
105
  if (exclude.filter && Array.isArray(exclude.filter)) {
86
106
  exclude.filter = exclude.filter.map(filter => {
87
107
  if (filter.op && isR5OnlyFilterOperator(filter.op)) {
88
- // Remove R5-only operators
89
- return null;
108
+ filter._op = { "extension": "http://hl7.org/fhir/5.0/StructureDefinition/extension-ValueSet.compose.include.filter.op", "valueCode": filter.op}
109
+ delete filter.op;
90
110
  }
91
111
  return filter;
92
112
  }).filter(filter => filter !== null);
@@ -135,8 +155,8 @@ function valueSetR5ToR3(r5Obj) {
135
155
  if (include.filter && Array.isArray(include.filter)) {
136
156
  include.filter = include.filter.map(filter => {
137
157
  if (filter.op && !isR3CompatibleFilterOperator(filter.op)) {
138
- // Remove non-R3-compatible operators
139
- return null;
158
+ filter._op = { "extension": "http://hl7.org/fhir/5.0/StructureDefinition/extension-ValueSet.compose.include.filter.op", "valueCode": filter.op}
159
+ delete filter.op;
140
160
  }
141
161
  return filter;
142
162
  }).filter(filter => filter !== null);
@@ -150,8 +170,8 @@ function valueSetR5ToR3(r5Obj) {
150
170
  if (exclude.filter && Array.isArray(exclude.filter)) {
151
171
  exclude.filter = exclude.filter.map(filter => {
152
172
  if (filter.op && !isR3CompatibleFilterOperator(filter.op)) {
153
- // Remove non-R3-compatible operators
154
- return null;
173
+ filter._op = { "extension": "http://hl7.org/fhir/5.0/StructureDefinition/extension-ValueSet.compose.include.filter.op", "valueCode": filter.op}
174
+ delete filter.op;
155
175
  }
156
176
  return filter;
157
177
  }).filter(filter => filter !== null);