The 4 Core NPHIES Transactions
1. Eligibility Check
Verify patient is covered before providing service.
POST /CoverageEligibilityRequest
{
"resourceType": "CoverageEligibilityRequest",
"patient": "Patient/12345",
"insurer": "Organization/BUPA",
"servicedDate": "2026-05-14",
...
}
2. Pre-Authorization
For major procedures before performing them.
POST /Claim?use=preauthorization
{
"resourceType": "Claim",
"use": "preauthorization",
...
}
3. Claim Submission
After service, submit the claim.
POST /Claim
{
"resourceType": "Claim",
"patient": "Patient/12345",
"diagnosis": [{...ICD-10 code...}],
"item": [{...CPT codes + drugs...}],
...
}
4. Payment Reconciliation
Receive remittance from payer.
GET /PaymentReconciliation?_id=PR-12345
Setup Step by Step
- Register hospital/clinic in CCHI portal
- Obtain Provider ID from NPHIES
- Generate X.509 certificate for digital signature
- Register certificate in NPHIES portal
- Test in NPHIES Sandbox environment
- Setup ICD-10 mapping table (if running ICD-9)
- Setup SFDA drug codes database (40K+ drugs)
- Setup HL7 → FHIR converter (if LIS/RIS present)
- Test end-to-end (eligibility → claim → payment)
- Go-live
Essential Mapping Tables
ICD-9 → ICD-10
| ICD-9 | ICD-10 | Description |
|---|---|---|
| 250.00 | E11.9 | Type 2 diabetes without complications |
| 401.9 | I10 | Essential hypertension |
| 786.50 | R07.9 | Chest pain unspecified |
| ... | ... | 14,000+ codes |
Full mapping table available from ZATCA + WHO. Softloomer NPHIES module comes with 14K+ mappings preloaded.
SFDA Drug Codes
| SFDA ID | Drug | Strength |
|---|---|---|
| 10001 | Panadol | 500mg |
| ... | ... | 40K+ drugs |
Common Errors and Solutions
Error 401: Authentication Failed
Cause: Certificate expired or wrong client_id. Fix: renew certificate + verify NPHIES portal registration.
Error 422: Validation Failed
Cause: FHIR resource format wrong. Fix: validate against NPHIES FHIR Implementation Guide.
Error 429: Rate Limit Exceeded
Cause: More than 100 requests/minute. Fix: implement queue + exponential backoff.
Claim Rejected: Missing ICD-10
Cause: Diagnosis not in ICD-10 format. Fix: mapping table conversion before submission.
Performance Tips
- Cache eligibility results for 24 hours — they won't change
- Batch claim submission — submit in chunks of 100 instead of one by one
- Async processing — pre-authorization takes 1-3 days, do polling instead of sync waiting
- Webhook integration — NPHIES supports webhooks for payment events
- Monitoring — track submission success rate, rejection reasons, processing time