
Initial Release
This repository is a practical example of a terminology server built on InterSystems IRIS for Health.
It is intended both as:
The repository is intentionally multi-terminology.
Today it supports SNOMED CT, LOINC and ICD across native and FHIR APIs.
The target direction is to keep adding terminologies through the same architectural model instead of building isolated one-off implementations.
This project demonstrates how IRIS for Health can be used as one integrated terminology platform for:
The goal is not only to expose endpoints.
The goal is to show how to structure a terminology server on IRIS so that each terminology can keep its real complexity while still contributing to one integrated view.
ui/ for exploring SNOMED CT, LOINC and ICD through native and FHIR APIs/terminology/snomed, /terminology/loinc and /terminology/icd/terminology/fhir/r4
Today the repository provides:
Terminology.Core.TermService used to present a more integrated viewThis is not yet a full enterprise terminology platform.
It is a practical reference implementation that shows how to build one on IRIS for Health.
Terminology releases / packages
|
v
IRIS interoperability / production-based intake
|
v
Terminology-specific load + build flows
|
+--> SNOMED source + derived tables
|
+--> LOINC source + derived tables
|
+--> ICD source + derived tables
|
v
Terminology.Core.TermService
|
+--> SNOMED adapter -> SNOMED repository
|
+--> LOINC adapter -> LOINC repository
|
+--> ICD adapter -> ICD repository
|
v
Native APIs + FHIR R4 terminology APIs
Use this diagram as the onboarding view.
More detailed flow and layering diagrams belong in https://github.com/intersystems-ib/iris-terminology-server/blob/main/ARCHITECTURE.md.
The repository does not force every terminology into one universal physical model.
Instead it separates concerns like this:
TermService defines the shared logical contractThis matters because SNOMED CT and LOINC do not have the same structure, hierarchy semantics or ingestion shape.
The architecture allows each terminology to keep those differences while still exposing one server experience on top of IRIS.
docker compose build
docker compose up -d
iris/shared/in/snomed/base/ and optionally iris/shared/in/snomed/extension/iris/shared/in/loinc/iris/shared/in/icd/Let the production ingest and build the runtime structures.
Verify the server using the HTTP examples under docs/http/.
Optionally run the demo UI from ui/ using the instructions in https://github.com/intersystems-ib/iris-terminology-server/blob/main/docs/getting-started.md.
Run the unit tests described in https://github.com/intersystems-ib/iris-terminology-server/blob/main/docs/getting-started.md.
For the full setup and verification flow, see https://github.com/intersystems-ib/iris-terminology-server/blob/main/docs/getting-started.md.
^TSTrace for request debuggingTerminology.Core.TermService, one adapter and one repository per terminology..http files in docs/http/ to anchor the discussion in working behavior.The aim of this repository is to help developers and partners answer questions like:
Future exploration may include additional search and discovery patterns on IRIS, including possible use of vector database features for selected terminology-server functions where they add real value.
The documentation is split into onboarding, architecture, scope and conventions so the repository can support both implementation work and higher-level partner conversations.
The repository now includes a vector-based semantic layer that complements the existing terminology services.
This layer enables:
The vector layer extends the current capabilities with:
sentence-transformersTerminology_Vector.TermEmbeddingThe vector functionality is exposed under:
/terminology/vector
Search using natural language across one or more terminologies:
GET /terminology/vector/search?q=neumonia adquirida en la comunidad
Example with filters
GET /terminology/vector/search?q=fiebre tifoidea&systemUri=http://snomed.info/sct&systemUri=http://hl7.org/fhir/sid/icd-10-es&limit=10
Supported filters:
systemUrireleaseIdlanglimitFind semantically similar concepts across different systems.
From a code:
GET /terminology/vector/crosswalk?sourceSystemUri=http://snomed.info/sct&sourceReleaseId=SNOMED-ES-20250131&sourceCode=233604007&targetSystemUri=http://hl7.org/fhir/sid/icd-10-es
From free text:
GET /terminology/vector/crosswalk?q=glucosa en sangre&targetSystemUri=http://loinc.org
The vectorization pipeline:
VECTOR_DOT_PRODUCT(Embedding, query_vector)
The vector layer follows the same architecture as the rest of the repository:
Planned extensions include:
Due to the database size limitations in the Community license the current project is based on containers.intersystems.com/intersystems/irishealth:2026.1 distribution, this version requires a valid IRIS key. If you want to use vector search functionalities your key must have vector capabilities.
If you don’t have any licence you can use IRIS for Health Community, you just have to open https://github.com/intersystems-ib/iris-terminology-server/blob/main/iris/Dockerfile file and replace the current distribution with containers.intersystems.com/intersystems/irishealth-community:2026.1.