ABDMFHIRNRCeS

NRCeS FHIR Profiles for ABDM: Why Your Bundles Show NA in the PHR App and 13 Fixes (2026)

March 20, 202611 min readUpdated Oct 19, 2026
Written by
Jitendra Choudhary
Jitendra Choudhary

CTO & Co-Founder

CTO & Co-Founder at Nirmitee.io. Architects healthcare integrations across FHIR, SMART on FHIR, ABDM and NHCX, writing from production experience taking hospital software from sandbox to go-live.

NRCeS FHIR Profiles for ABDM: Why Your Bundles Show NA in the PHR App and 13 Fixes (2026)

When the ABDM PHR app shows NA for the patient, doctor or hospital, the record reached the app but its FHIR bundle does not follow the NRCeS FHIR profiles closely enough for the app to read those fields. Almost every case comes down to the Composition: it must be the first entry, and its subject, author and custodian must point, by urn:uuid, to a Patient, Practitioner and Organization inside the same bundle, each with the fields the app displays.

This guide explains how the NRCeS FHIR profiles for ABDM fit together, gives a diagnostic flowchart for NA fields, walks through 13 fixes with the exact JSON, and lists the Composition type for each health information type. It is based on the NRCeS FHIR Implementation Guide for ABDM, version 6.5.0, and on our own work getting every value of real records to display in ABDM apps. Updated September 2026.

What the NRCeS FHIR profiles are and why ABDM depends on them

NRCeS (the National Resource Centre for EHR Standards) publishes the FHIR R4 Implementation Guide that ABDM uses for health records. The official ABDM FHIR profiles live at nrces.in/ndhm/fhir/r4; the current package is ndhm.in version 6.5.0. Every record your hospital system shares through ABDM Milestone 2 is a FHIR document bundle built to these profiles, and every app that displays the record reads it the way the profiles describe.

That is why a bundle can be valid FHIR and still show NA: generic FHIR allows references and structures that the ABDM apps do not follow. The fix is to build to the NRCeS profiles exactly, not to FHIR in general. If you need the integration built end to end, our ABDM integration services team builds and validates these bundles for hospital software.

Official ABDM FHIR formatWhat it defines
DocumentBundleThe outer bundle for every health record: type document, identifier, timestamp, meta
Composition profiles (one per record type)OPConsultRecord, PrescriptionRecord, DiagnosticReportRecord, DischargeSummaryRecord, ImmunizationRecord, WellnessRecord, HealthDocumentRecord, InvoiceRecord
Resource profilesPatient, Practitioner, Organization, Encounter, Condition, Observation, MedicationRequest, DiagnosticReport, DocumentReference and others, each with meta.profile set to its NRCeS URL

The bundle structure the PHR app reads

An ABDM health record is a FHIR document: a Bundle whose first entry is a Composition, and whose other entries are the resources the Composition points to.

  1. Composition, always the first entry. FHIR's own rule for documents (bdl-11) is that "a document must have a Composition as the first resource".
  2. Patient, referenced by Composition.subject, with the ABHA number as identifier.
  3. Practitioner, referenced by Composition.author.
  4. Organization, referenced by Composition.custodian, carrying your HFR facility ID.
  5. Encounter, referenced by Composition.encounter.
  6. Clinical resources: Condition, Observation, MedicationRequest, DiagnosticReport, DocumentReference and others, each listed in a Composition.section.

Why the PHR app shows NA: a diagnostic flowchart

Work through these checks in order. Each "No" is a specific change to your bundle, and the first failing check is usually the one that causes every NA you see.

PHR shows NA forUsual causeFix
Patient nameNo Patient resource, or Composition.subject points somewhere elseAdd the Patient with name; reference it by urn:uuid
Gender, date of birthPatient resource lacks the fieldsFill gender and birthDate
DoctorNo Practitioner, or Composition.author not setAdd the Practitioner with a name; set author
Hospital or clinicNo Organization, or Composition.custodian not setAdd the Organization with your HFR facility ID; set custodian
EverythingReferences use Patient/123 style, or Composition is not firstUse urn:uuid fullUrls; move Composition to entry 0

13 fixes for NRCeS-compliant ABDM FHIR bundles

1. References must use urn:uuid

Every fullUrl is urn:uuid:<id>, and every reference points to one of them. Relative references such as Patient/abc-123 are the single most common cause of NA fields.

// Wrong
"subject": { "reference": "Patient/abc-123" }

// Right
"subject": { "reference": "urn:uuid:4f1c9a2e-7b3d-4e61-9c2f-1a2b3c4d5e6f", "display": "Test Patient" }

2. Bundle.identifier is required

FHIR's rule for documents (bdl-9) is that "a document must have an identifier with a system and a value".

"identifier": { "system": "https://your-hospital.example/bundle", "value": "7d9e1c2a-5b4f-4a3e-8c1d-2e3f4a5b6c7d" }

3. Bundle.timestamp is required

Rule bdl-10: "a document must have a date".

"timestamp": "2026-09-28T10:30:00.000+05:30"

4. Organization carries your HFR facility ID

{
  "resourceType": "Organization",
  "meta": { "profile": ["https://nrces.in/ndhm/fhir/r4/StructureDefinition/Organization"] },
  "identifier": [{
    "type": { "coding": [{ "system": "http://terminology.hl7.org/CodeSystem/v2-0203", "code": "PRN" }] },
    "system": "https://facility.ndhm.gov.in",
    "value": "IN0000000000"
  }],
  "name": "Your Hospital Name"
}

5. Composition.custodian points to that Organization

"custodian": { "reference": "urn:uuid:<organization-id>", "display": "Your Hospital Name" }

6. Composition.type uses the SNOMED code for the record type

"type": { "coding": [{ "system": "http://snomed.info/sct", "code": "371530004", "display": "Clinical consultation report" }], "text": "Clinical consultation report" }

7. Every resource carries its NRCeS meta.profile

"meta": { "profile": ["https://nrces.in/ndhm/fhir/r4/StructureDefinition/Patient"] }

The bundle itself carries DocumentBundle; the record-type profile (for example OPConsultRecord) goes on the Composition, not on the bundle.

8. Patient identifier with the MR type and ABHA number

"identifier": [{
  "type": { "coding": [{ "system": "http://terminology.hl7.org/CodeSystem/v2-0203", "code": "MR" }] },
  "system": "https://healthid.ndhm.gov.in",
  "value": "91-1111-2222-3333"
}]

9. Every reference carries display text

Add display to subject, author and custodian references. It costs nothing and gives the app a readable fallback.

10. Bundle meta.versionId and meta.profile

"meta": {
  "versionId": "1",
  "lastUpdated": "2026-09-28T10:30:00.000+05:30",
  "profile": ["https://nrces.in/ndhm/fhir/r4/StructureDefinition/DocumentBundle"],
  "security": [{ "system": "http://terminology.hl7.org/CodeSystem/v3-Confidentiality", "code": "V", "display": "very restricted" }]
}

11. The DocumentBundle profile on the bundle

Set Bundle.type to document and Bundle.meta.profile to DocumentBundle, as above. A bundle of type collection will not be read as a health record.

12. Composition identifier

"identifier": { "system": "https://ndhm.in/phr", "value": "645bb0c3-ff7e-4123-bef5-3852a4784813" }

13. Composition.encounter and sections

Reference the Encounter from Composition.encounter, and list every clinical resource in a Composition.section entry. A resource that is in the bundle but in no section is often not displayed at all.

ABDM health information types, profiles and SNOMED codes

Each record type has its own Composition profile. In IG 6.5.0 most of them fix the Composition type code; the diagnostic report profile uses a value set of report types instead.

Health information typeComposition profileComposition.type (SNOMED)
OP consultationOPConsultRecord371530004 Clinical consultation report
PrescriptionPrescriptionRecord440545006 Prescription record
Diagnostic reportDiagnosticReportRecordFrom the diagnostic report type value set, for example 721981007 Diagnostic studies report
Discharge summaryDischargeSummaryRecord373942005 Discharge summary
Immunization recordImmunizationRecord41000179103 Immunization record
Health document recordHealthDocumentRecord419891008 Record artifact
Wellness recordWellnessRecordNo fixed code in IG 6.5.0; use the profile's document type binding
InvoiceInvoiceRecordNo fixed code in IG 6.5.0; use the profile's document type binding

The full walkthrough of each record type, with complete examples, is in our ABDM FHIR bundles guide, and working samples are in our public ABDM FHIR bundle examples on GitHub. To see how the bundles map to a real hospital visit, read ABDM FHIR bundles through a patient's hospital visit.

Validate against the NRCeS IG before you push

Do not wait for the PHR app to tell you something is wrong. Validate every bundle type against the IG package with the HL7 FHIR validator as part of your build:

# HL7 FHIR validator against the NRCeS package for ABDM
java -jar validator_cli.jar opconsult-bundle.json -version 4.0.1 -ig ndhm.in#6.5.0

Validation catches missing identifiers, wrong profiles and broken references. It does not catch every display problem, because a reference can be valid and still point to a Patient without a name. After validation, open each record type in the sandbox PHR app once, and check each field against the table above.

Remember that the bundle is encrypted before it leaves your system. If the app shows nothing at all rather than NA, the problem is usually encryption, not the bundle: see our ABDM Fidelius encryption guide.

What we check before any record goes live

In a live test of our ABDM integration against the sandbox in September 2026, every value in every test record arrived and displayed on the requesting side: 526 of 526 values and 30 of 30 attachments. The checks that got us there are the ones in this guide, run as automated tests on every record type:

  • Composition first, every reference a urn:uuid that resolves inside the bundle.
  • Subject, author and custodian always present, with the fields the app shows.
  • Every clinical resource listed in a section.
  • Validation against ndhm.in#6.5.0 in the build, not by hand.

For the rest of the M2 flow that carries these bundles, see building an ABDM HIP from scratch, and for the whole integration, our ABDM integration step-by-step guide. If your records show NA and you need them fixed before NHA testing, talk to our ABDM team.

Ready to scale?

Talk to our healthcare engineering team about building, integrating, and shipping faster.

Frequently Asked Questions

Why does the ABDM PHR app show NA for the patient name?

The record reached the app, but Composition.subject does not point by urn:uuid to a Patient resource inside the same bundle, or that Patient has no name. Add the Patient with name, gender and birthDate, and reference it from Composition.subject.

What are the NRCeS FHIR profiles for ABDM?

They are the FHIR R4 profiles in the NRCeS Implementation Guide for ABDM, published at nrces.in/ndhm/fhir/r4 (package ndhm.in, version 6.5.0). They define the DocumentBundle, one Composition profile per record type and profiles for resources such as Patient, Practitioner and Organization.

Which FHIR profile does an ABDM bundle use?

The Bundle uses the DocumentBundle profile with type document. The record-type profile, such as OPConsultRecord or DischargeSummaryRecord, goes on the Composition, and each resource carries its own NRCeS profile in meta.profile.

Must the Composition be the first entry in an ABDM bundle?

Yes. FHIR requires a document bundle to have a Composition as its first resource (rule bdl-11), and the ABDM apps read the record from it.

What Organization identifier does ABDM expect?

Your HFR facility ID, sent as an Organization identifier with system https://facility.ndhm.gov.in, and referenced from Composition.custodian so the app can show the hospital or clinic name.

What are the official ABDM FHIR formats?

The official formats are the NRCeS FHIR Implementation Guide profiles: OPConsultRecord, PrescriptionRecord, DiagnosticReportRecord, DischargeSummaryRecord, ImmunizationRecord, WellnessRecord, HealthDocumentRecord and InvoiceRecord, all inside a DocumentBundle.

How do I validate an ABDM FHIR bundle?

Run the HL7 FHIR validator with the NRCeS package, for example validator_cli.jar bundle.json -version 4.0.1 -ig ndhm.in#6.5.0, then open each record type once in the sandbox PHR app to confirm the displayed fields.
Share