-
Notifications
You must be signed in to change notification settings - Fork 15
NamingSystem Examples
ℹ️ For concepts, the Philippine NamingSystem registry, and the Patient identity use case, see NamingSystem in PH Core. This page has the diagrams.
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
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
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
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
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)"]
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
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