Skip to content

Release v0.18.2

Choose a tag to compare

@github-actions github-actions released this 28 Oct 18:25
· 322 commits to main since this release

[0.18.2] - 2026-10-29

Added

  • IPS: national profiles - the profile on Bundle that a national IG defines for an IPS document: its jurisdiction (an ISO 3166 country code, or a UN M49 region), the IG's package id and version, and the profile's url. They are shared across all projects at /ips/national-profiles, where everyone can see them and only the administrator adds, edits and deletes them (also as JSON). A new processing step, after validation, validates each document against each national profile - loading the IG's package into the validator, once - and keeps the outcome and whether the document passed (no errors). The document's new National Profiles view lists them, and shows each one's validation as the Validation view does
  • IPS: modules.ips.validator.jar - a validator jar of the module's own (a local build of org.hl7.fhir.core, say), used as it is, never downloaded or updated. Don't put such a jar at bin/validator_cli.jar: the wrapper takes that jar's version from the .version file it wrote when it downloaded the release, so a different jar there is started as if it were that release, and is replaced by the next one
  • Registry: GET /tx-reg/choose-server - given the code systems a request involves and the client's default server, which one server to send it to, and a log of why. The same choice the Java tooling makes, for clients that aren't Java
  • SNOMED CT ECL: member filters (^ refset {{ M ... }}) - effectiveTime (with a time value or set), active, moduleId (any sub expression) and the reference set's own fields (targetComponentId = << X, mapTarget = "...", mapGroup >= #2, ...), comma-separated and repeatable. A member filter anywhere other than directly after a memberOf constraint is a syntax error (INVALID_ECL)
  • SNOMED CT ECL: concept filters ({{ C ... }}) - active, definitionStatus (primitive/defined), definitionStatusId, moduleId (a concept, a bracketed concept list or any sub expression) and effectiveTime
  • SNOMED CT ECL: description filters ({{ D ... }}) - term (match and wild: search terms, single or a set), language, typeId and type (syn/fsn/def), dialectId and dialect (en-us, en-gb and the other aliases in the ECL specification) with acceptability sets, moduleId, effectiveTime, active and id. The filters in one block apply to the same description; only active descriptions are considered unless active is given
  • SNOMED CT ECL: history supplements ({{ + HISTORY }}, HISTORY-MIN / -MOD / -MAX, HISTORY (*), HISTORY (refset expression)) - the inactive concepts that the selected historical association reference sets associate with the result are added to it
  • SNOMED CT ECL: AND and OR between refinements - between attributes (: A = x AND B = y, : A = x OR B = y, with brackets for nesting), within an attribute group ({ A = x OR B = y }) and between groups ({ ... } OR { ... }). Mixing AND and OR without brackets is rejected, as it is for compound expressions. Previously only , (conjunction) was accepted
  • SNOMED CT ECL: concrete values in refinements (= #500, >= #1.5, != #-1, = "text", = true). The importer now reads sct2_RelationshipConcreteValues_* into a new cache section (cache version 19, after 18's alternate identifiers); editions imported before this report a concrete-value refinement as unsupported. The test edition cache is now sct_test_20250909e.cache
  • SNOMED CT ECL: != in refinements (: A != X - at least one A whose value is not in X; [0..0] A != X - every A is in X), reversed attributes (: R A = X - the concepts that are the value of A on a concept in X), and , as a conjunction between expressions as well as between refinements
  • SNOMED CT ECL: comments (/* ... */), top and bottom of set (!!> (...), !!< (...)), and attribute names that are expressions rather than a single concept (: << 762705008 = ..., : (A OR B) = ..., : ^ refset = ..., : * = ..., and the same after . in dotted expressions)
  • SNOMED CT ECL: alternate identifiers (LOINC#14394-1, "LOINC#14394-1"): the scheme alias names an identifier scheme (LOINC = 30051010000102 |LOINC code ID|, as imported from the LOINC Extension) and the code resolves to the concept(s) carrying it, which then take hierarchy operators like any set. An unknown scheme, or a code that no concept carries, is INVALID_ECL, as an unknown concept is
  • SNOMED CT ECL: reference set field selection on member-of (^ [targetComponentId] refset) is parsed, and reported as UNSUPPORTED_ECL (the selected fields, and many of the referenced components, are descriptions) rather than as a syntax error

Changed

  • IPS: a clinical profile's page is the same for everyone. The required sections and entries are a table of Expectation, Section and Entry (Code is system|code, or Code is in a value set, with [m..n] when the cardinality isn't 1..1). The rules about resources are a table of Expectation, Resource Set (Conditions where Code is ...) and Rule, in words for .exists(), .x.exists() and .x.y.exists(), .all(sameSubject()), .conformsTo(url) and .category.hasCoding(system, code). The administrator adds, edits and deletes the rules on that page one at a time, in a dialog, each saved by itself; the full editor is still there as Edit all
  • IPS: fhir-validator-wrapper 1.6.1 (was 1.5.0) - it sends /loadIG the package in the request body (1.5.0 sent it in the query, which the validator ignored, so no national profile's package loaded), and starts validator 7.0.4 and later with -txTests, which the tx tests need
  • Terminology server: code systems, value sets and concept maps that both hl7.terminology and an endpoint's FHIR core package provide. THO's is still always the default for the url, but the core versions are no longer dropped: a reference that names a core version (url|5.0.0) gets it, where THO doesn't have that version. Previously they weren't available at all, so a reference to one failed - including THO's own value sets that pin a core version (ValueSet/concept-property-type 6.0.1 includes concept-property-type 5.0.0) - and valueSetVersion=5.0.0 found nothing
  • Registry: the "Register your own server" and "Documentation" links on the main page come from the master registration file (registration and ecosystem-documentation), so each ecosystem has its own, and a link the file doesn't give is left out. They were hard-coded to the HL7 ecosystem's
  • Tx tests: the loinc mode (the LOINC suite) is run

Fixed

  • VSAC: the cache folder terminology-cache/vsac is created if it doesn't exist. Only its parent was being created (the folder name was passed as if it were a file name), so on a fresh install the VSAC database could not be created (SQLITE_CANTOPEN) and every VSAC value set failed
  • CodeSystem resources: the notSelectable property is recognised as the tx-ecosystem requirements say - by the concept-properties#notSelectable uri, whatever local code the code system gives it, and by the code notSelectable only where the code system doesn't declare that code with a different uri. A code system that used notSelectable for a property of its own had its concepts marked abstract in expansions and treated as not selectable (notSelectable-unprop-all, notSelectable-unprop-true). A filter on that code is still a filter on the code system's own property
  • LOINC: $lookup returns CLASS as a string, the class name (e.g. CHEM), with the Part code for the class as partCode; it returned the Part code as a code
  • SNOMED CT ECL: a hierarchy operator on a bracketed expression was silently dropped - < (A OR B) returned A and B themselves rather than their descendants. It now applies to every member of the set, as do operators on * and on ^ refset, which were previously rejected as unsupported
  • SNOMED CT ECL: ^ on a reference set whose members are descriptions (a language reference set) returned an empty expansion. It is now reported as UNSUPPORTED_ECL when the reference set is named, and skipped when it merely falls inside a computed operand such as ^ *
  • SNOMED CT ECL: an attribute name with no comparison (: 363698007 with nothing after it) was accepted by the parser and failed later as unsupported; it is a syntax error
  • SNOMED CT ECL: an evaluation error is now UNSUPPORTED_ECL unless it is about a concept that does not exist (INVALID_ECL). It was classified by matching the error text, which filed = true as a syntax error. A concept id that is not 6-18 digits is rejected by the parser
  • IPS: the pages link the module's browser scripts with their version (?v=), so a browser picks up a changed script as soon as the server is restarted with it, instead of using its cached copy for up to an hour

Tx Conformance Statement

FHIRsmith v0.18.2 passed all 4565 HL7 terminology service tests (modes tx.fhir.org+omop+general+snomed+mimetypes+icd-11+icf+closure+loinc, tests v1.10.1-snapshot, runner v7.0.3)