Skip to content

9.9.0

Latest

Choose a tag to compare

@johngrimes johngrimes released this 01 Sep 05:30
· 307 commits to main since this release
v9.9.0
6b03c33

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_of resolves 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 translate resolves 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-Language preference 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: PathlingContext gains SNOMED and FHIR terminology import methods, and Python and R gain terminology_mode / terminology_storage_path configuration alongside default_snomed_edition, expansion_cache_size and dialect_aliases tuning parameters.
  • Command line interface - new import-snomed and import-fhir-terminology commands populate a store, and the --tx-store option (or a [tx-store] config table) points any terminology-evaluating command - including view, fhirpath, run and console - 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() and distinct() existence functions #2385.
  • The memberOf, subsumes, subsumedBy and translate FHIRPath functions now accept Quantity input, 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 .tsv path means tab-separated data without an explicit option, and new --delimiter and --no-header options control the separator and header row directly #2647.
  • The terminology commands gain a --from option and tabular format auto-detection, including support for headerless CSV input and Delta and Parquet directory inputs #2646.
  • The run and console commands now pre-import Pathling's public functions, and bind the context to pc, 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 mergeSchema or written under a different type configuration read correctly.
  • ViewDefinition url and version are 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 _scale companion 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 _scale as a storage scale must clamp it at 6.
  • View results containing TIMESTAMP_NTZ, day-time interval, year-month interval, LocalDate or Instant columns 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