Skip to content

NamingSystem Examples

jg edited this page Jun 4, 2026 · 6 revisions

ℹ️ For concepts, the Philippine NamingSystem registry, and the Patient identity use case, see NamingSystem in PH Core. This page has the diagrams.


FHIR NamingSystem — Model and Examples


Overview

FHIR relies heavily on globally unique system identifiers (URIs) to distinguish business identifiers (e.g. MRN, PhilHealth PIN, PhilSys ID) from terminology systems (e.g. SNOMED CT, LOINC). A URI alone is not self-describing — the NamingSystem resource is the governed metadata layer that says what a URI actually means.

The critical join between any FHIR instance and the NamingSystem registry:

Identifier.system == NamingSystem.uniqueId.value

Example: Terminology system (SNOMED CT)

flowchart LR
    A["Coding
    system = http://snomed.info/sct
    code = 22298006"]

    B[NamingSystem: SNOMED CT]

    C["URI:
    http://snomed.info/sct"]

    A --> B
    B --> C
Loading

Example: PhilHealth Identification Number (PIN)

flowchart LR
    A["Patient.identifier
    system = http://philhealth.gov.ph/fhir/Identifier/philhealth-id
    value = 12-345678901-2"]

    B["NamingSystem: PhilHealthID
    publisher = PhilHealth
    kind = identifier"]

    C["URI:
    http://philhealth.gov.ph/fhir/Identifier/philhealth-id"]

    A --> B
    B --> C
Loading

Example: PhilSys Identification Number

flowchart LR
    A["Patient.identifier
    system = http://philsys.gov.ph/fhir/Identifier/philsys-id
    value = 1234-5678-9101-1213"]

    B["NamingSystem: PhilSysID
    publisher = PSA
    kind = identifier"]

    C["URI:
    http://philsys.gov.ph/fhir/Identifier/philsys-id"]

    A --> B
    B --> C
Loading

Example: Layered identifiers in a Patient Client Registry

A single Patient resource can carry identifiers from multiple agencies simultaneously. All are valid under the open-sliced PHCorePatient profile.

flowchart LR
    P["Patient
    (FHIR instance)"]

    P -->|identifier[0]| A["Patient.identifier
    system = .../philsys-id
    value = 1234-5678-9101-1213"]

    P -->|identifier[1]| B["Patient.identifier
    system = .../philhealth-id
    value = 12-345678901-2"]

    P -->|identifier[2]| C["Patient.identifier
    system = .../hospital-mrn
    value = MRN-00001"]

    A --> NS1["NamingSystem: PhilSysID
    publisher = PSA"]

    B --> NS2["NamingSystem: PhilHealthID
    publisher = PhilHealth"]

    C --> NS3["open slice
    no NamingSystem required
    (can be added later)"]
Loading

Example: Multiple unique identifiers for the same system (URI + OID)

A NamingSystem can record multiple representations of the same identifier system — useful for legacy integration and HL7 v2 ↔ FHIR transformation.

flowchart LR
    A["Patient Identifier
    system = http://hospital.example.org/mrn
    value = 123456"]

    B[NamingSystem: Hospital MRN]

    C["URI:
    http://hospital.example.org/mrn"]

    D["OID:
    1.2.36.146.595.217.0.1"]

    A --> B
    B --> C
    B --> D
Loading

Conceptual model

classDiagram

%% Core FHIR pattern
class Identifier {
  system : uri
  value : string
  use : code
  type : CodeableConcept
}

class Coding {
  system : uri
  code : string
  display : string
}

class CodeableConcept {
  text : string
}

CodeableConcept "1" --> "*" Coding

%% NamingSystem
class NamingSystem {
  url : uri
  name : string
  status : code
  kind : code
  date : dateTime
  publisher : string
}

class NamingSystemUniqueId {
  type : code
  value : string
  preferred : boolean
  authoritative : boolean
  period : Period
}

class Period {
  start : dateTime
  end : dateTime
}

NamingSystem "1" --> "*" NamingSystemUniqueId

%% Terminology resources
class CodeSystem {
  url : uri
  name : string
  status : code
}

class ValueSet {
  url : uri
  name : string
}

class ConceptMap {
  url : uri
  name : string
}

%% Relationships
Identifier --> NamingSystem : system resolves to
Coding --> NamingSystem : system resolves to
CodeSystem --> NamingSystem : identified by
ValueSet --> CodeSystem : uses codes from
ConceptMap --> CodeSystem : maps between
Loading

Clone this wiki locally