fhirsmith 0.9.1 → 0.9.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -5,6 +5,36 @@ All notable changes to the Health Intersections Node Server will be documented i
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [v0.9.3] - 2026-04-10
9
+
10
+ ### Added
11
+
12
+ - Add support for handling contained value sets
13
+ - Add beta support for ECL
14
+
15
+ ### Changed
16
+
17
+ - Bump vsac fetch to 1000 and improve history presentation
18
+
19
+ ### Fixed
20
+
21
+ - Fix count on empty value set
22
+
23
+ ### Tx Conformance Statement
24
+
25
+ FHIRsmith passed all 1651 HL7 terminology service tests (modes tx.fhir.org+omop+general+snomed, tests v1.9.1, runner v6.9.6)
26
+
27
+ ## [v0.9.2] - 2026-04-14
28
+
29
+ ### Fixed
30
+
31
+ - Improve VSAC logging
32
+ - Fix SCT import to handle SCT DK
33
+
34
+ ### Tx Conformance Statement
35
+
36
+ FHIRsmith passed all 1578 HL7 terminology service tests (modes tx.fhir.org+omop+general+snomed, tests v1.9.1, runner v6.9.6)
37
+
8
38
  ## [v0.9.1] - 2026-04-10
9
39
 
10
40
  ### Added
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fhirsmith",
3
- "version": "0.9.1",
3
+ "version": "0.9.3",
4
4
  "txVersion": "1.9.1",
5
5
  "description": "A Node.js server that provides a collection of tools to serve the FHIR ecosystem",
6
6
  "main": "server.js",
@@ -1511,4 +1511,6 @@ CONFORMANCE_STATEMENT_WORD = The html source contains the word ''{0}'' but it is
1511
1511
  VALUESET_CODE_CONCEPT_HINT = {3}. Note that the display in the ValueSet does not have to match; this check exists to help check that it''s not accidentally the wrong code
1512
1512
  VALUESET_CODE_CONCEPT_HINT_VER ={3}. Note that the display in the ValueSet does not have to match; this check exists to help check that it''s not accidentally the wrong code
1513
1513
  TERMINOLOGY_TX_SYSTEM_UNSUPPORTED = The code cannot be checked because codeSystem ''{0}'' version ''{1}'' is not supported ({2})
1514
- INVALID_REGEX = The regex ''{0}'' is not valid: {1}
1514
+ INVALID_REGEX = The regex ''{0}'' is not valid: {1}
1515
+ INVALID_ECL = Invalid ECL expression: ''{0}'': ({1})
1516
+ UNSUPPORTED_ECL = The ECL expression is not supported: ''{0}'': ({1})
package/tx/cs/cs-api.js CHANGED
@@ -579,11 +579,12 @@ class CodeSystemProvider {
579
579
  * throws an exception if the search filter can't be handled
580
580
  *
581
581
  * @param {FilterExecutionContext} filterContext filtering context
582
+ * @param {boolean} forIteration - whether this filter is going to be iterated
582
583
  * @param {String} prop
583
584
  * @param {ValueSetFilterOperator} op
584
585
  * @param {String} prop
585
586
  **/
586
- async filter(filterContext, prop, op, value) { throw new Error("Must override"); } // well, only if any filters are actually supported
587
+ async filter(filterContext, forIteration, prop, op, value) { throw new Error("Must override"); } // well, only if any filters are actually supported
587
588
 
588
589
  /**
589
590
  * called once all the filters have been handled, and iteration is about to happen.
@@ -169,7 +169,7 @@ class AreaCodeServices extends CodeSystemProvider {
169
169
  return (prop === 'type' || prop === 'class') && op === '=';
170
170
  }
171
171
 
172
- async filter(filterContext, prop, op, value) {
172
+ async filter(filterContext, forIteration, prop, op, value) {
173
173
 
174
174
  assert(filterContext && filterContext instanceof FilterExecutionContext, 'filterContext must be a FilterExecutionContext');
175
175
  assert(prop != null && typeof prop === 'string', 'prop must be a non-null string');
@@ -188,7 +188,7 @@ class CountryCodeServices extends CodeSystemProvider {
188
188
  }
189
189
 
190
190
 
191
- async filter(filterContext, prop, op, value) {
191
+ async filter(filterContext, forIteration, prop, op, value) {
192
192
 
193
193
  assert(filterContext && filterContext instanceof FilterExecutionContext, 'filterContext must be a FilterExecutionContext');
194
194
  assert(prop != null && typeof prop === 'string', 'prop must be a non-null string');
package/tx/cs/cs-cpt.js CHANGED
@@ -490,7 +490,7 @@ class CPTServices extends BaseCSServices {
490
490
  return new CPTPrep(iterate);
491
491
  }
492
492
 
493
- async filter(filterContext, prop, op, value) {
493
+ async filter(filterContext, forIteration, prop, op, value) {
494
494
 
495
495
 
496
496
  let list;
package/tx/cs/cs-cs.js CHANGED
@@ -1217,7 +1217,7 @@ class FhirCodeSystemProvider extends BaseCSServices {
1217
1217
  * @param {string} value - Filter value
1218
1218
  * @returns {Promise<FhirCodeSystemProviderFilterContext>} Filter results
1219
1219
  */
1220
- async filter(filterContext, prop, op, value) {
1220
+ async filter(filterContext, forIteration, prop, op, value) {
1221
1221
 
1222
1222
 
1223
1223
  let results = null;
@@ -176,7 +176,7 @@ class Iso4217Services extends CodeSystemProvider {
176
176
  return prop === 'decimals' && op === 'equals';
177
177
  }
178
178
 
179
- async filter(filterContext, prop, op, value) {
179
+ async filter(filterContext, forIteration, prop, op, value) {
180
180
 
181
181
  assert(filterContext && filterContext instanceof FilterExecutionContext, 'filterContext must be a FilterExecutionContext');
182
182
  assert(prop != null && typeof prop === 'string', 'prop must be a non-null string');
package/tx/cs/cs-hgvs.js CHANGED
@@ -200,7 +200,7 @@ class HGVSServices extends CodeSystemProvider {
200
200
  throw new Error('Filters are not supported for HGVS');
201
201
  }
202
202
 
203
- async filter(filterContext, prop, op, value) {
203
+ async filter(filterContext, forIteration, prop, op, value) {
204
204
 
205
205
  throw new Error('Filters are not supported for HGVS');
206
206
  }
package/tx/cs/cs-lang.js CHANGED
@@ -259,7 +259,7 @@ class IETFLanguageCodeProvider extends CodeSystemProvider {
259
259
  return false;
260
260
  }
261
261
 
262
- async filter(filterContext, prop, op, value) {
262
+ async filter(filterContext, forIteration, prop, op, value) {
263
263
 
264
264
  assert(filterContext && filterContext instanceof FilterExecutionContext, 'filterContext must be a FilterExecutionContext');
265
265
  assert(prop != null && typeof prop === 'string', 'prop must be a non-null string');
package/tx/cs/cs-loinc.js CHANGED
@@ -658,7 +658,7 @@ class LoincServices extends BaseCSServices {
658
658
  return new LoincPrep(iterate);
659
659
  }
660
660
 
661
- async filter(filterContext, prop, op, value) {
661
+ async filter(filterContext, forIteration, prop, op, value) {
662
662
  const filter = new LoincFilterHolder();
663
663
  await this.#executeFilterQuery(prop, op, value, filter);
664
664
  filterContext.filters.push(filter);
package/tx/cs/cs-ndc.js CHANGED
@@ -405,7 +405,7 @@ class NdcServices extends CodeSystemProvider {
405
405
  ['10-digit', '11-digit', 'product'].includes(value);
406
406
  }
407
407
 
408
- async filter(filterContext, prop, op, value) {
408
+ async filter(filterContext, forIteration, prop, op, value) {
409
409
 
410
410
 
411
411
  if (prop === 'code-type' && op === '=') {
package/tx/cs/cs-omop.js CHANGED
@@ -549,7 +549,7 @@ class OMOPServices extends BaseCSServices {
549
549
  return new OMOPPrep(iterate);
550
550
  }
551
551
 
552
- async filter(filterContext, prop, op, value) {
552
+ async filter(filterContext, forIteration, prop, op, value) {
553
553
 
554
554
 
555
555
  if (prop === 'domain' && op === '=') {
@@ -366,7 +366,7 @@ class RxNormServices extends CodeSystemProvider {
366
366
  return new RxNormPrep();
367
367
  }
368
368
 
369
- async filter(filterContext, prop, op, value) {
369
+ async filter(filterContext, forIteration, prop, op, value) {
370
370
 
371
371
 
372
372
  const filter = new RxNormFilterHolder();