NP Core Implementation Guide
1.0.0 - Release
NP Core Implementation Guide - Local Development build (v1.0.0) built by the FHIR (HL7® FHIR® Standard) Build Tools. See the Directory of published versions
This page describes the conformance expectations that apply to all systems claiming conformance to the NP Core Implementation Guide.
This guide uses the RFC 2119 vocabulary for conformance requirements:
| Verb | Meaning |
|---|---|
| SHALL | Absolute requirement. Non-compliance means a system is not conformant. |
| SHALL NOT | Absolute prohibition. |
| SHOULD | Strongly recommended. A valid reason may exist to deviate, but implications must be understood. |
| SHOULD NOT | Strongly discouraged. |
| MAY | Optional. |
Elements marked Must Support (MS) in a profile carry the following obligations:
1, in which case a Data Absent Reason extension SHALL be used (see Unsupported Data).Must Support does not imply that an element is required (mandatory cardinality) unless the profile also specifies a minimum cardinality of 1.
A FHIR resource instance claims conformance to an NP Core profile by including the profile canonical URL in meta.profile. For example, a Patient conformant to NP Core shall include:
meta.profile = "http://fhir.digitalhealth.gov.np/core/StructureDefinition/np-core-patient"
Systems producing or consuming NP Core-profiled resources are expected to validate their data against the published StructureDefinitions.
Where meta.profile is how an instance claims conformance, a CapabilityStatement is how a system does. A system conforms to NP Core as one or more of the three actors, each defined by its own CapabilityStatement:
| Actor | CapabilityStatement |
|---|---|
| Server | NP Core Server CapabilityStatement |
| Creator | NP Core Creator CapabilityStatement |
| Consumer | NP Core Consumer CapabilityStatement |
A system claims an actor by asserting instantiates of that actor's CapabilityStatement in its own CapabilityStatement, and SHALL declare exactly which NP Core profiles it supports in rest.resource.supportedProfile.
Conformance is checked in two places. The profiles a system declares are verified instance by instance, by validating exchanged resources against the published StructureDefinitions as required under Claiming Conformance. The actor CapabilityStatements define the interactions and search parameters a conformance checker exercises against the system.
Every NPCorePatient instance SHALL carry:
identifier[healthId] - Nepal Health ID issued by MoHFS.identifier[nationalId] - Nepal National ID issued by DONIDCR is supported and recommended, but is not mandatory in the current profile (0..1).Every NPCorePractitioner instance SHALL carry at least one council registration identifier (invariant np-prac-1):
NPCoreHealthFacility instances representing registered health facilities SHALL carry identifier[nhfrCode] using the NHFR NamingSystem (http://nhfr.digitalhealth.gov.np). Systems representing a health facility registered in the National Health Facility Registry SHALL use NPCoreHealthFacility rather than the base NPCoreOrganization.
This guide uses the standard FHIR binding strengths:
| Strength | Meaning |
|---|---|
| required | Codes SHALL come from the specified ValueSet. |
| extensible | Codes SHOULD come from the specified ValueSet; other codes may be used if no suitable code exists. |
| preferred | Codes SHOULD come from the specified ValueSet when possible. |
| example | The ValueSet illustrates the type of codes that may be used. Any code from the appropriate system is permitted. |
When a system does not have data for an element that is marked Must Support, it SHALL either omit the element entirely or, where clinically required, use a Data Absent Reason extension.
Nepal's official civil calendar is Bikram Sambat (BS), which runs roughly 56 years and 8 months ahead of the Gregorian (AD) calendar. FHIR makes no provision for non-Gregorian calendars.
date, dateTime and instant values in NP Core resources SHALL be expressed in the Gregorian (AD) calendar, as required by the FHIR specification.This rule matters because the failure is silent. A Bikram Sambat date written straight into a Gregorian element - 2047-02-01 in Patient.birthDate in place of 1990-05-15 - is a well-formed date that passes every validator while being wrong by about 57 years. Nothing downstream can tell it apart from a legitimate value, so age-derived logic such as paediatric dosing, immunisation windows, growth monitoring and age-banded reporting fails without any error being raised.
Where a date was genuinely captured in Bikram Sambat and that capture is worth keeping for display or audit, the Bikram Sambat Date extension records the original BS string alongside the Gregorian value. It may be used on any date or dateTime element, so it attaches to Patient.birthDate directly, and on a period it attaches to Encounter.period.start and Encounter.period.end individually rather than to the period as a whole. It is deliberately not available on instant, which records a machine timestamp rather than a calendar date a person entered. The Gregorian element remains the value of record and the extension never substitutes for it. FHIR cannot check that the two calendars agree, so keeping them consistent is the capturing system's responsibility, and the extension SHOULD be populated only where a faithful BS capture exists rather than derived after the fact.
"birthDate": "1990-08-16",
"_birthDate": {
"extension": [
{
"url": "http://fhir.digitalhealth.gov.np/core/StructureDefinition/np-core-bikram-sambat-date",
"valueString": "2047-04-32"
}
]
}
Bikram Sambat months vary between 29 and 32 days, so 2047-04-32 (32 Shrawan 2047) is a valid BS date even though no Gregorian month has a 32nd day. The extension accepts the same partial precisions FHIR allows on a date - YYYY, YYYY-MM or YYYY-MM-DD.
Two further rules apply to how the BS value is recorded:
birthDate with a full BS date would assert a precision the source never had.dateTime form. Bikram Sambat is a calendar with no time component, so on elements that carry a dateTime - such as Encounter.period.start and Encounter.period.end - the extension records only the BS calendar date and the time of day lives solely in the Gregorian value. Where the Gregorian value carries a time, the BS date SHALL correspond to the Asia/Kathmandu local date of that instant, not its UTC date; the two fall on different days for instants either side of local midnight.text) is optional but SHOULD be provided where it improves human readability.