This release introduces local terminology mode, which evaluates terminology queries against an imported local store without any dependency on a terminology server, and adds a set of new FHIRPath functions along with encoder and CSV handling improvements.
New features
Local terminology mode
Pathling can now evaluate terminology functions against a local, Delta-backed terminology store with no network dependency #2644. Content is imported into the store once, and a context configured for local mode then evaluates all seven terminology functions (member_of, translate, subsumes, subsumed_by, display, property_of and designation) identically to remote mode.
- Importers - a SNOMED CT RF2 importer reads a snapshot release (directory or zip archive), builds the transitive closure, reports how much of each file resolved, and rejects ambiguous sources containing two files for a single-valued role. A FHIR importer reads CodeSystem, ValueSet and ConceptMap resources from a JSON file, a directory, or a FHIR NPM package (
.tgz), streaming content with bounded memory so large code systems import within a modest driver heap. - Value set support - local
member_ofresolves imported value sets by canonical URL, the SNOMED implicit value set forms (?fhir_vs,?fhir_vs=refset/[id],?fhir_vs=isa/[id],?fhir_vs=ecl/[expr]) with a supported subset of ECL, and VCL implicit value sets (http://fhir.org/VCL?v1=[expr]). - Translation - local
translateresolves imported ConceptMaps and the SNOMED implicit concept map form (?fhir_cm=[refsetId]), in both directions. - Dialects - display and designation selection is dialect-aware: a language tag resolves to a SNOMED CT language reference set, weighted
Accept-Languagepreference lists are honoured, the store's default dialect can be set at import time or through configuration, and additional dialect aliases can be registered. - Bindings - local mode is exposed through the library API in all languages:
PathlingContextgains SNOMED and FHIR terminology import methods, and Python and R gainterminology_mode/terminology_storage_pathconfiguration alongsidedefault_snomed_edition,expansion_cache_sizeanddialect_aliasestuning parameters. - Command line interface - new
import-snomedandimport-fhir-terminologycommands populate a store, and the--tx-storeoption (or a[tx-store]config table) points any terminology-evaluating command - includingview,fhirpath,runandconsole- at the store to run entirely offline.
See the local terminology mode documentation for full details.
New FHIRPath functions
- Added the
all(),allTrue(),allFalse(),anyTrue(),anyFalse(),isDistinct()anddistinct()existence functions #2385. - The
memberOf,subsumes,subsumedByandtranslateFHIRPath functions now acceptQuantityinput, treating the coded unit as the concept; an uncoded quantity yields an empty result #2727.
Other improvements
- The CSV delimiter in the command line interface is now inferred from the path extension on both read and write, so a
.tsvpath means tab-separated data without an explicit option, and new--delimiterand--no-headeroptions control the separator and header row directly #2647. - The terminology commands gain a
--fromoption and tabular format auto-detection, including support for headerless CSV input and Delta and Parquet directory inputs #2646. - The
runandconsolecommands now pre-import Pathling's public functions, and bind the context topc, so scripts and interactive sessions can call them without boilerplate #2648. - Merging into a Delta table now tolerates a source narrower than the target: missing fields are written as nulls under the target's own schema, so a warehouse written with more open types than the current encoder remains importable. Complementing this, nested collection fields are decoded by name rather than position, and fields the stored data does not carry decode as absent, so tables migrated with
mergeSchemaor written under a different type configuration read correctly. - ViewDefinition
urlandversionare now retained through encoding, allowing a stored ViewDefinition to be matched by its canonical URL. The server release builds on this to resolve SQL on FHIR dependency references by canonical URL.
Bug fixes
- The decimal
_scalecompanion field now records the true scale of the source FHIR decimal rather than the storage scale, so values that lost precision on encoding are detectable; the storage cap is applied on read instead, and every decoded value is unchanged #2737. Consumers that read_scaleas a storage scale must clamp it at 6. - View results containing
TIMESTAMP_NTZ, day-time interval, year-month interval,LocalDateorInstantcolumns now serialise to JSON and NDJSON as ISO-8601 strings rather than failing, matching the representation the CSV format already used #2731.
Dependencies
- Raised HttpComponents, Netty, Logback and Jackson across the core libraries to address published vulnerabilities.
- Updated fhir-bulk-java to 1.1.0, which retries failed bulk export downloads and no longer closes a filesystem it did not open.
Full Changelog: v9.8.0...v9.9.0