VN Core Deep Dive
How to read a VN Core Profile
A Profile is where VN Core turns FHIR base into a Vietnam data contract. Reading a profile correctly tells you which elements are required, which are Must Support, which codes are allowed, which extensions matter, and which examples prove valid payloads.
TL;DR
- Read differential before snapshot. Differential shows what VN Core added; snapshot is mainly for tooling.
- Must Support is not the same as required. Required is cardinality
min > 0; Must Support is a system obligation within the IG scope. - Slicing is where Vietnam identifiers become explicit. Patient.identifier may contain CCCD, BHYT, BHXH, MRN, birth certificate, and passport slices.
- Read binding with its ValueSet.
Coding.displayis for rendering;system + code + versioncarries machine-readable meaning.
1. Eight signals to read on every Profile
Canonical URL
The stable profile identifier. Instances declare it in `meta.profile`; validators use it to select constraints.
Differential
The part VN Core actually adds or tightens relative to the base or parent profile. Read this first.
Snapshot
The full merged structure after base + differential. Essential for validators, too long as a first read.
Cardinality
How often an element may appear. `1..1` means exactly once; `0..*` means optional and repeatable.
Must Support
Systems in scope of the IG must understand and handle the element; this does not mean it always appears.
Slicing
Partitioning arrays such as `identifier[]` into meaningful slices: CCCD, BHYT, BHXH, MRN.
Binding
Constraining a coded element to a ValueSet. Binding, not `display`, decides machine-readable validity.
Example
The fastest way to understand profile use in a real workflow and avoid reference or slice mistakes.
2. Must Support versus cardinality
Cardinality answers whether an instance must contain an element. If an element is 1..1, a payload missing that element will not validate. If it is 0..1, the payload may omit it and remain valid.
Must Support answers whether systems in the IG scope must understand and handle the element. A 0..1 MS element may be absent in an individual payload, but a conforming VN Core system must not ignore it when present.
Review rule: do not scan only for 1..1. Read the Must Support column and capability narrative as well. Vendors can pass validation while still failing a workflow if they ignore Must Support data.
3. Identifier slicing: Vietnam Patient example
FHIR base only says Patient.identifier is an array of identifiers. VN Core must distinguish identifier types because each has a different authority, format, and workflow. Slicing lets the same array carry named slices:
Patient.identifier
├── identifier[CCCD] system = .../sid/cccd value = 12 digits
├── identifier[BHYT] system = .../sid/bhyt value = BHYT card number
├── identifier[BHXH] system = .../sid/bhxh value = 10 digits
├── identifier[MRN] system = hospital MRN value = local medical record number
└── identifier[GKS] system = birth certificate value = certificate number
When a HIS adapter sends Patient data, the validator checks not only that identifier exists, but also which slice matches, whether the system URI is correct, whether the value matches the expected pattern, and whether slice cardinalities are satisfied.
4. Binding and terminology
Coded elements such as Condition.code, Observation.code, Patient.gender, or ethnicity extensions are not free-text fields. The profile binds them to a ValueSet with a binding strength. With required, the code must be in the ValueSet. With extensible, systems should use the ValueSet when a suitable code exists and only go outside it for a real gap.
In Vietnam data, binding is especially important because the same display label may appear in multiple code systems. "01", "DN", or "I10" only become unambiguous with the right system. That is why VN Core maintains separate CodeSystems and ValueSets for each domain.
5. Checklist before claiming VN Core conformance
VN Core Deep Dive Series
Move from overview to the IG in the right order.
These four pages orient readers before opening the normative IG: understand the artifact map, read Profiles, govern terminology, then validate Bundles and workflow payloads.
Artifact map
Profiles, terminology, capability, operations, examples, and package boundary.
How to read a Profile
CurrentDifferential, snapshot, Must Support, slicing, binding, and extensions.
Terminology
CodeSystems, ValueSets, ConceptMaps, NamingSystems, and Coding.display.
Bundles and validation
Bundles, examples, CapabilityStatements, OperationDefinitions, and go-live checks.